如何使用JavaScript';对象特征工作中的什么?
我正在学习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 {
检查右侧对象中是否存在项
此代码将用户选项合并为默认选项
让我困惑的是,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)
JavaScriptfor/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);
}
}