當使用原始類型(字符串,數字)作爲函數調用的this
主題(作爲function.call()或函數apply())的第一個參數時,基本類型被提升爲其對象相當於(例如,一個字符串變成一個字符串)。爲什麼javascript在傳入function.apply()或function.call()時會改變原始類型?
舉例說明:
var f = function(x) { return [typeof(this), typeof(x)]; }
var obj = '123'
f.call(obj, obj)
>>> ["object", "string"]
也就是說,「本」成爲一個對象(這是,我已經檢查一個String對象),而第二個參數來調用成爲第一個參數函數「f」 ,並保持原始字符串。
對象都是均爲「123」,但微妙的東西不起作用(例如,它們在「==」方面是相等的,而不是在「===」方面)。
我注意到在Chrome和Firefox中都有這種行爲,所以我假設它有一個特定的原因。我搜索了,但沒有找到任何解釋。我會很感激任何解釋,希望通過某種鏈接來解釋圍繞它的規則以及它爲什麼會發生。
真的很好找到J-P。非常有趣的問題(和答案)。少一個JavaScript WTF對我來說至少=) – anddoutoi 2010-02-19 08:59:38
它不僅看起來是正確的,而且完全正確。優秀的來源。 – 2010-02-19 09:11:32
啊,非常感謝! 我很想知道爲什麼toObject()被調用,但我不認爲這種推理是在規範的任何地方。 我記得在某處讀取原始字符串上的方法是通過將它們轉換爲一個String對象並返回來解決的,所以這可能是一個類似的情況...... – gfxmonk 2010-02-19 10:52:48