数组unshift for javascript中的字符串

时间:2016-04-03 11:11:30

标签: javascript string for-loop

var hello = 'hello';
Array.prototype.unshift.call(hello, '11') // gives error
Array.prototype.join.call(hello, ', ') // works, why??

有人可以向我解释为什么 .join 有效以及为什么 .unshift 没有

2 个答案:

答案 0 :(得分:3)

因为字符串是不可变的,并且unshift尝试分配给字符串的索引(属性),如

"hello"[4] = '1'

参考:http://www.ecma-international.org/ecma-262/6.0/#sec-string-exotic-objects

  

String对象是一个奇特的对象,它封装了一个String值,并公开了与String值的各个代码单元元素对应的虚拟整数索引数据属性。 Exotic String对象始终具有名为" length"的数据属性。其值是封装的String值中的代码单元元素的数量。 代码单元数据属性和"长度"属性是不可写且不可配置的。

join不会分配任何内容,只会读取属性,因此它适用于任何具有.length的对象。

答案 1 :(得分:1)

试试这个:

String.prototype.unshift = function(el) {
    let arr = [this];
    arr.unshift(el);
    return arr.join("");
}

var s = "BCD";
s = s.unshift("A");

console.log(s); // ABCD