var x= 1;
Number.prototype.test = function() { return this };
x.test() === x.test() // false
爲什麼===
測試返回false?Javascript:原型號
var x= 1;
Number.prototype.test = function() { return this };
x.test() === x.test() // false
爲什麼===
測試返回false?Javascript:原型號
因爲this
將是一個Number對象,而不是原始的原始數值,並且比較兩個同樣創建的對象總是返回false:
{"test":"Hello"} === {"test":"Hello"} // false
// Check the typeof your vars
var x= 1;
Number.prototype.test = function() { return this };
x.test() === x.test() // false
alert("x is a "+typeof(x)+", x.test() is an "+typeof(x.test()));
如果你正在尋找一個解決方法,投this
多項
var x= 1;
Number.prototype.test = function() { return +this };
x.test() === x.test() // TRUE!
alert("x is a "+typeof(x)+", x.test() is also a "+typeof(x.test()));
@eugene:語法錯誤的優點(每個代碼塊中的錯過的右括號)。感謝編輯:) – 2010-03-08 11:13:49
比較對象總是返回false?現在,這是醜陋的...如何檢查兩個對象是否是同一個呢? – 2010-03-16 21:48:47
@Bart:很好的地方,我的意思是比較同樣創建的對象將返回false。 – 2010-03-16 23:36:10
每當您撥打.test()
時,都會創建一個Number的新實例,這是非常期待的行爲,每個裝箱解決方案都以這種方式工作。您可以在C#和Java中嘗試相同的操作,並獲得完全相同的結果。 (好吧,Java有小數字的Integer對象池,所以你不會得到完全相同的結果)
當我們檢查===
運營商,它會檢查同一類型,對象。
這裏,問題可能是由於不同的對象創建。
嘗試輸出(例如,通過console.log或alert,不知道你的上下文)它返回的值。是的,我不知道這會有什麼幫助,但這是一開始。 – 2010-03-08 10:46:44