如何使用JavaScript';对象特征工作中的什么?

如何使用JavaScript';对象特征工作中的什么?,javascript,Javascript,我正在学习JavaScript,下面这个例子是我目前无法理解的。使用中的检查右侧对象中是否存在项 此代码将用户选项合并为默认选项 让我困惑的是,i在任何地方都没有定义,那么它如何知道i是什么呢? 如果我在for块的内部打印出I,它会列出对象的每个选项 我已经读过了,但它没有解释对未定义变量的处理 var i; for(i in options) { if(i in this.options) { this.options[i] = options[i]; } else {

我正在学习JavaScript,下面这个例子是我目前无法理解的。使用中的
检查右侧对象中是否存在项

此代码将用户选项合并为默认选项

让我困惑的是,
i
在任何地方都没有定义,那么它如何知道
i
是什么呢?
如果我在
for
块的
内部打印出
I
,它会列出对象的每个
选项

我已经读过了,但它没有解释对未定义变量的处理

var i;
for(i in options) {
  if(i in this.options) {
    this.options[i] = options[i];
  } else {
    throw new Error("Notice doesn't support option: " + i);
  }
}
让我困惑的是,
i
在任何地方都没有定义,那么它是如何定义的呢 它知道什么是
i

你可以这样做

for(var i in options) {
  if(i in this.options) {
    this.options[i] = options[i];
  } else {
    throw new Error("Notice doesn't support option: " + i);
  }
}
现在它正在被定义

进一步解释

for(in)

JavaScript
for/in语句
循环遍历对象的属性

有两种不同类型的“in”:

代码中的第一个
不是
中的
运算符。这是一个为。。。循环中,循环遍历对象的键,将每个键分配给变量,在本例中,变量为
i

代码中的第二个
是您已经阅读文档的oner。返回真或假的运算符

注意:除非您在该函数作用域的前面有
var i
,否则您在循环中省略
var
关键字就是在声明一个全局变量
i
。您很可能想要:

for(var i in options){

这不是因为。。。特别是在

任何时候,当您试图分配给一个未定义的变量时,它都会被忽略。全局变量是
窗口
对象的属性,因此可以按如下方式观察此行为:

for (i in [0]) {
    alert(window.i); // displays "0"
}
然而,这被认为是语言中一个不幸而令人困惑的错误特征;大多数情况下,您不需要或不想要全局变量。强烈反对依赖这种行为,如果将
'use strict'
作为函数脚本的第一行,这种行为甚至不起作用

您应该始终使用
var i
在首次分配变量之前或时声明变量

for(var i in options) {
  if(i in this.options) {
    this.options[i] = options[i];
  } else {
    throw new Error("Notice doesn't support option: " + i);
  }
}

感谢您的澄清,我确实将其设置为var I;在我的应用程序顶部,但根据
文档中的
,我无法确定它的值来自何处。in
就是票,谢谢+1,因为我没有意识到他在使用不同的
in
接线员,所以我的回答错过了相关的要点。
i = 0
alert(window.i); // displays "0"
for(var i in options) {
  if(i in this.options) {
    this.options[i] = options[i];
  } else {
    throw new Error("Notice doesn't support option: " + i);
  }
}