我一直在JavaScript中使用方括号表示法来创建和调用关联数组。
在这个例子中,我理解方括号表示法允许你使用变量来调用数组中的某个对象。
那么在点表示法中如何做到这一点呢?
var item = {};
item['1'] = 'pen';
var x = 1;
console.log(item[x]); // console will show 'pen'
我一直在JavaScript中使用方括号表示法来创建和调用关联数组。
在这个例子中,我理解方括号表示法允许你使用变量来调用数组中的某个对象。
那么在点表示法中如何做到这一点呢?
var item = {};
item['1'] = 'pen';
var x = 1;
console.log(item[x]); // console will show 'pen'
你不能在点表示法中使用变量(除非使用eval
,但您不想这样做)。在点表示法中,属性名称本质上是一个常量。
myObj.propName
// is equivalent to
myObj["propName"]
my prop
(或更好的是my%prop
)的属性,则在大多数情况下,如果不使用括号表示法,将导致语法错误。
MDN上的成员运算符页面进一步解释了这一点。item.x // is this the property "x" or do I have to look up variable "x"?
如果你使用数字来访问数组,你必须使用方括号:
item[0]
var k = 0;
item[k]
作为
item.0
无法使用(语法错误)。
如果您使用字符串
item["key"]
var p = "key";
item[p]
等于
item.key
var p = "key";
item.p
p
没有被当作变量处理。现在你其实可以了。
在这种情况下,你可以使用方括号来使用变量进行点符号表示法。
console.log(item.[x])
这在Typescript中特别有用。
点表示法只限于某些字符...请参见这个问题...方括号表示法允许您打破这种限制:
var item = {};
item['very long variable name containing empty spaces ... and dots...'] = 'valid var';
item.1 = 'not valid var'; // will not work;
item['1'] = 'valid var'; // will do just fine...
我制作了一个用点符号表示法设置变量的函数,在Angular 2中使用,但这也可以在Vanilla Javascript中使用,只需进行轻微修改。
class Utility {
static setByDot(_obj, _path, _val) {
return _path.split('.').reduce(function (prev, curr, _idx, _arr) {
if ( _idx == (_arr.length-1) && prev ) {
prev[curr] = _val;
}
return prev ? prev[curr] : null
}, _obj || self);
}
}
Utility.setByDot( _obj, 'foo.bar', 'value' );
然后
console.log( _obj.foo.bar );
如果路径存在,则输出
string(6) 'value'
propName
是一个变量,而是一个属性的名称。 - Zack The HumanmyObj[propName]
。不是吗?除此之外,我同意,它是相同的。现在。 - sjngm