myObj[property]
和myObj['property']
之间有什么区别以及他们访问内容的方式?
var key = 'property';
var myObj = {
key: [2,3,6,8],
property: ["matt", "black", "rodel"]
};
使用quoted
和unquoted
属性也有很大差异吗?
答案 0 :(得分:1)
不同之处在于,您不能obj[property]
除非property
是一个持有字符串的变量,您可以obj['property']
,obj[property]
(属性必须是字符串)或obj.property
:
var key = 'property';//<<<<<<<<<<<<<<<<<<<<<<
// ^
var myObj = { // ^
key: [2,3,6,8], // ^
property: ["matt", "black", "rodel"]// ^
}; // ^
console.log(myObj[key]); // key is a string ^, this is neither myObj.key nor myObj['key']
console.log(myObj['property']);
console.log(myObj.property);
&#13;
请注意,obj[property]
不一定是obj['property']
或obj.property
,它取决于字符串变量property
的值,在您的示例中为字符串变量{{1}值为key
,"property"
返回了对象的属性。
答案 1 :(得分:1)
正如评论中已经提到的那样,'property'
是一个字符串文字,用作对象键。
现在property
可能是变量并具有其他值,例如:
var property = 'key';
myObj[property] === myObj['key']; // true
将是true
声明。
通常,最好直接使用对象键,而不是使用array
表示法。
// preferred usage
myObj.key;
myObj.property;
// not recommended to use on objects, but only on arrays
myObj['key'];
myObj['property'];
但是如果你的属性是动态的并且你不能预先知道它的值,那么使用数组表示法就可以了:
['key', 'property'].forEach( function( keyName ) {
console.log( keyName + ' => ' + myObj[keyName] )
} );
答案 2 :(得分:1)
您无意中提供了完美的示例代码:
var key = 'property';
var myObj = {
key: [2,3,6,8], // this line does *not* use the key variable!
property: ["matt", "black", "rodel"]
};
console.log(myObj[key]); // myObj['property'] -> myObj.property
console.log(myObj['key']); // myObj.key
但是请注意,当定义一个Object文字时,对于该键使用引号或不引用没有区别(假设键没有空格等)。
var obj = { "key": 123 };
和
var obj = { key: 123 };
可以互换。