javascript - 这个 for-in 循环符合标准吗?

标签 javascript

我试图限制暴露给位于隔离闭包中的eval的局部变量的数量,以保持范围尽可能不受污染。但我还需要遍历传递的数组,因此我正在做与此非常类似的事情:

var oObj = [{
    key: "",
    arr: {
      "one": 1,
      "two": 2,
      "three": 3
    }
}];

for (oObj[0].key in oObj[0].arr) {
    console.log(oObj[0].arr[oObj[0].key]);
}

在我的实际代码中,oObj 作为第一个参数传递到闭包函数中(例如 arguments[0]),以便暴露给唯一的局部变量该函数是arguments(无论如何都会公开)。

此代码按预期工作,但是 jshint.com针对此代码块列出不少于 12 个警告。

那么...我是否把范围推得太远了,或者我是否符合标准? for-in 循环可以使用 object.property 作为 key 吗? JSHint 似乎并不这么认为,而我尝试过的一切似乎都很满意。

最佳答案

According to the ECMAScript standards ,for-in 循环的语法是

IterationStatement : for ( LeftHandSideExpression in Expression ) Statement

a LeftHandSideExpression can be a CallExpression ,这还可以是

CallExpression . IdentifierName

所以,是的,根据标准,这是一个有效的 for-in 循环。

但这是否令人困惑?是的。为什么不直接做这样的事情:

for (key in oObj[0].arr) {
    oObj[0].key = key;
    console.log(oObj[0].arr[key]);
}

关于javascript - 这个 for-in 循环符合标准吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27682194/

相关文章:

javascript - 使用 JavaScript 读取 'hidden_elem' 评论

javascript - 如何在 Next.js 中使用 webpack 5 配置?

两个对象的 JavaScript 函数 onclick

javascript - 为什么这个去抖动功能不起作用?

javascript - 使用过渡更改 Canvas 上的图像

javascript - Firestore 无法读取\n jspdf 字符串

javascript - Jest 遇到了意外的标记 - 用 jest 和 enzyme 进行 React

javascript - Tinymce 文本编辑器不适用于 Bootstrap 模式窗口

javascript - 是否可以在Electron中过滤URL?

javascript - 从 TWebBrowser 中的 GoogleMaps 获取纬度经度