2010-03-08 63 views
3
var x= 1; 
Number.prototype.test = function() { return this }; 
x.test() === x.test() // false 

爲什麼===測試返回false?Javascript:原型號

+0

嘗試輸出(例如,通過console.log或alert,不知道你的上下文)它返回的值。是的,我不知道這會有什麼幫助,但這是一開始。 – 2010-03-08 10:46:44

回答

3

因爲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())); 
+0

@eugene:語法錯誤的優點(每個代碼塊中的錯過的右括號)。感謝編輯:) – 2010-03-08 11:13:49

+0

比較對象總是返回false?現在,這是醜陋的...如何檢查兩個對象是否是同一個呢? – 2010-03-16 21:48:47

+0

@Bart:很好的地方,我的意思是比較同樣創建的對象將返回false。 – 2010-03-16 23:36:10

1

每當您撥打.test()時,都會創建一個Number的新實例,這是非常期待的行爲,每個裝箱解決方案都以這種方式工作。您可以在C#和Java中嘗試相同的操作,並獲得完全相同的結果。 (好吧,Java有小數字的Integer對象池,所以你不會得到完全相同的結果)

0

當我們檢查===運營商,它會檢查同一類型,對象。

這裏,問題可能是由於不同的對象創建。