为什么我不能在JavaScript中设置数组元素(字符串)的属性?

Clo*_*boy 6 javascript arrays string

var array = ['a', 'b', 'c'];
array[0].property = 'value';

alert(array[0].property);   
alert(array[0].property = 'value');
alert(array[0].property);   
Run Code Online (Sandbox Code Playgroud)

结果?undefined,'value',则undefined

为什么这段代码没有按预期工作?

Jon*_*nan 10

数组是无关紧要的 - 您正在尝试在基元上设置属性:

不是对象且没有任何方法的数据.JavaScript有5种原始数据类型:string,number, boolean,null,undefined.除了null和undefined之外,所有基元值都具有包围原始值的对象等价物,例如String对象环绕字符串基元.所有原语都是不可变的.

如果您绝对必须使用属性在字符串中携带此附加信息,则替代方法是使用等效的对象:

>>> var array = [new String('a'), new String('b'), new String('c')];
>>> array[0].property
undefined
>>> array[0].property = 'value'
"value"
>>> array[0].property
"value"
Run Code Online (Sandbox Code Playgroud)

如果你这样做可能需要注意,以后需要检测该值是否为字符串:

>>> var a = ['s', new String('s')];
>>> a.map(function(s) { return typeof s; });
["string", "object"]
>>> a.map(function(s) { return s instanceof String });
[false, true]
>>> a.map(function(s) { return Object.prototype.toString.call(s) == '[object String]' });
[true, true]
Run Code Online (Sandbox Code Playgroud)