2013-12-23 107 views
11

我想了解.Notation[]表示法之间的区别。当我使用if (object[key] === true)时,在我的问题中,我得到了正确的答案。当我使用if (object.key === true)它不起作用。有人能解释为什么它不同吗?javascript中的点符号和括号表示法的区别

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

+0

@thefourtheye,为什么具体应该一个变量不被命名对象?谢谢。 – jstone

回答

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没有名为keymyObj.key试图获得与名称key成员)的成员,并在接下来的情况下, ,myObj有一个名为myVar的成员(myObj[key]试图获得值为key的成员)。

点表示法

jslint prefers dot notation

[]符号

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

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]); 
} 
相关问题