javascript中字符串的数组取消移位

javascript中字符串的数组取消移位,javascript,string,for-loop,Javascript,String,For Loop,有人能给我解释一下为什么.join起作用,为什么.unshift不起作用,因为字符串是不可变的,unshift试图分配给字符串的索引(属性),如 var hello = 'hello'; Array.prototype.unshift.call(hello, '11') // gives error Array.prototype.join.call(hello, ', ') // works, why?? 参考资料: 字符串对象是一个外来对象,它封装字符串值并公开与字符串值的各个代码单元元素

有人能给我解释一下为什么.join起作用,为什么.unshift不起作用,因为字符串是不可变的,
unshift
试图分配给字符串的索引(属性),如

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

字符串对象是一个外来对象,它封装字符串值并公开与字符串值的各个代码单元元素对应的虚拟整数索引数据属性。外来字符串对象总是有一个名为“length”的数据属性,其值是封装字符串值中的代码单元元素数代码单元数据属性和“长度”属性都是不可写和不可配置的。

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

的任何对象。请尝试以下操作:

String.prototype.unshift=函数(el){
设arr=[这个];
取消移位(el);
返回arr.join(“”);
}
var s=“BCD”;
s=s.unshift(“A”);

控制台。日志;//ABCD
您希望它做什么?为什么要使用数组,然后使用
.unshift()
,然后使用
.join()
?代码所做的就是连接两个字符串,因此
返回el+这个
就足够了<代码>返回el.concat(this)如果您确实想使用方法调用来执行此操作。尽管如此,它实际上并没有回答为什么?问题。只是提供了一个完全不同的选择。
"hello"[4] = '1'