如何在点符号中使用变量,如方括号表示法

时间:2011-08-18 05:17:01

标签: javascript

我一直在Javascript中使用方括号表示来创建和调用关联数组。

在这个例子中,我理解方括号表示允许您使用变量来调用数组中的某个对象。

你会用点符号做这样的事情吗?

var item = {};
    item['1'] = 'pen';

var x = 1;

console.log(item[x]);  // console will show 'pen'

6 个答案:

答案 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中使用特别有用。