JavaScript中点符号和方括号符号的区别

16

我正在尝试理解.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";
};

3
不要将变量命名为“object”。 - thefourtheye
1
在点符号表示法中,您通过名称访问键,在括号表示法中则通过字符串。后者可以是动态的。 - elclanrs
@thefourtheye,为什么变量不能被命名为object?谢谢。 - jstone
1
@jstone,JavaScript 中有一个内置的对象叫做 Object,因此最好不要使用相同的变量名,即使大小写不同也是如此。 - thefourtheye
2个回答

18

当你使用点表示法(dot notation)时,key 意味着对象中实际的属性,如果该属性不存在则会返回 undefined ,这与 true 不相等。

当你使用方括号表示法([] notation)时,你可以通过变量 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的成员)。

点表示法

JSLint更倾向于使用点表示法

[]表示法

这提供了灵活性。您可以使用变量动态访问成员。


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]);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接