我想了解.Notation
和[]
符号之间的区别。在下面的问题中,当我使用if (object[key] === true)
时,我得到了正确的答案。当我使用if (object.key === true)
时,它不起作用。有人可以解释为什么会有所不同。
var myObj = {
one: false,
two: false,
three: false,
four: true,
five: false,
six: false
};
var myFunc = function (object) {
for (var key in object) {
if (object[key] === true) {
return "There is a true value in this object";
} else {
}
}
return "Sorry, there are no true values in this object";
};
答案 0 :(得分:16)
使用点表示法时,key
表示对象中的实际属性,该属性不存在。因此,返回的undefined
不等于true
。
使用[]
表示法时,您将使用变量key
中的名称访问对象中的属性。所以,这将有效。
例如,
var myObj = {
myVar : 1
};
for (var key in myObj) {
console.log(key);
console.log(myObj.key);
console.log(myObj[key]);
}
这将打印,
myVar
undefined
1
因为,myObj
没有名为key
的成员(myObj.key
尝试获取名为key
的成员),在下一个案例中,myObj
有一个名为myVar
的成员(myObj[key]
尝试使用key
中的值获取成员。
点符号
[]符号
这提供了灵活性。您可以使用变量动态访问成员。
答案 1 :(得分:1)
点符号编写速度更快,阅读更清晰。
方括号表示法允许访问包含特殊字符的属性以及使用变量选择属性。
<form id="myForm">
<div><label>
<input type="checkbox" name="foo[]" value="1"> 1
</label></div>
<div><label>
<input type="checkbox" name="foo[]" value="2"> 2
</label></div>
<div><label>
<input type="checkbox" name="foo[]" value="3"> 3
</label></div>
</form>
错误示例:
var inputs = myForm.foo[];
另一方面,方括号表示法允许:
var inputs = myForm["foo[]"];
由于方括号是字符串的一部分,因此它们的特殊含义不适用。方括号表示法的第二个优点是处理变量属性名称时。
for (var i = 0; i < 10; i++) {
doSomething(myForm["myControlNumber" + i]);
}