2016-04-03 83 views
0
var hello = 'hello'; 
Array.prototype.unshift.call(hello, '11') // gives error 
Array.prototype.join.call(hello, ', ') // works, why?? 

可有人向我解釋爲什麼。加入作品,爲什麼.unshift陣列不印字在JavaScript字符串

+0

你到底想幹什麼? – 2016-04-03 11:50:21

回答

3

因爲字符串是不可改變的,並且unshift嘗試分配給指數(字符串的屬性),如在

"hello"[4] = '1' 

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

String對象是封裝String值並顯示對應於String值的各個代碼單元元素的虛擬整數索引數據屬性的外來對象。外來字符串對象總是有一個名爲「length」的數據屬性,其值是封裝字符串值中的代碼單元元素的數量。 代碼單元數據屬性和「length」屬性都是不可寫和不可配置的。

join不分配任何東西,只讀取性能,因此使用具有.length任何對象的工作。