我一直在Javascript中使用方括号表示来创建和调用关联数组。
在这个例子中,我理解方括号表示允许您使用变量来调用数组中的某个对象。
你会用点符号做这样的事情吗?
var item = {};
item['1'] = 'pen';
var x = 1;
console.log(item[x]); // console will show 'pen'
答案 0 :(得分:25)
您不能在点符号中使用变量(使用{<1}},而 想要这样做。使用点表示法,属性名称基本上是常量。
eval
答案 1 :(得分:7)
如果使用数字访问数组,则必须使用括号:
item[0]
var k = 0;
item[k]
作为
item.0
不起作用(语法错误)。
如果您使用字符串
item["key"]
var p = "key";
item[p]
等于
item.key
在后一种情况下
var p = "key";
item.p
会导致输出错误,因为此处p
不会被视为变量。
答案 2 :(得分:7)
简短的回答是:您不能使用dot notation访问媒体资源,除非您知道该媒体资源的名称。
Dot notation还对您可以访问的属性名称设置了限制,因为属性名称必须是有效的JavaScript标识符。例如,如果您有一个名为my prop
的属性(或者更好,my%prop
),那么在不使用bracket notation的情况下就无法访问它,因为它会导致语法错误,大多数情况。
Member Operators page on MDN进一步解释了这一点。
暂且不谈:
能否使用点表示法动态查找属性会不会有点混乱?
item.x // is this the property "x" or do I have to look up variable "x"?
答案 3 :(得分:3)
点符号仅限于某些字符...请参阅this question ...方括号表示法允许您打破该限制:
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...
答案 4 :(得分:0)
我创建了一个函数,用点符号设置变量,角度为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'
如果路径不存在,它只是优雅地退出。
答案 5 :(得分:0)
您实际上可以了。
在这种情况下,您可以使用方括号将变量用于点表示法。
console.log(item.[x])
这对于在Typescript中使用特别有用。