var x = function() {};
var y = function() {};
alert(x === y); // is false;
爲什麼x不等於y,如果它們都被初始化爲相同的值?爲什麼是一個空的函數!==一個空的函數?
var x = function() {};
var y = function() {};
alert(x === y); // is false;
爲什麼x不等於y,如果它們都被初始化爲相同的值?爲什麼是一個空的函數!==一個空的函數?
從MDN:
如果兩個操作數都是對象,然後JavaScript的比較內部 引用時操作數指代相同的對象中 存儲器中是相等的。
顯然,您的對象是彼此不同的,並且指向不同的內存位置。等於比較運算符檢查兩個操作數是否引用同一個對象,而不是它們是否是副本。
考慮的是,(new Number(1)) != (new Number(1))
,而1 == 1
當你在JavaScript中比較對象,你正在檢查,看看他們是同一個對象,而不是他們是否相同的對象。
+1。感謝您的快速和現實的解釋。我仍然有點困惑,直到我再次看到MDN,才明白'same'和'identical'之間的區別。當然,你的解釋絕對正確。 – Nope
因爲他們是不一樣的函數對象。比較器不查看函數體。
ECMA標準給出了some precise rules關於JavaScript中嚴格相等的工作原理。基本上,正如@Quentin所說,如果您要比較兩個對象(除了Number,String,Boolean,null或undefined),它只會返回true,如果它們是相同的對象。這裏情況不同。
考慮以下代碼:
var x = function() {};
var y = function() {};
x.something = "this is x";
y.something = "this is not x";
alert(x.something === y.something);
這會給false
。
+1代碼顯示了爲什麼它們不能爲真。 – Nope
Spec-11.9.6來自:
全等比較算法
比較X === y,其中x和y是數值,產生真或假 。這種比較如下進行:
1.如果Type(x)與Type(y)不同,則返回false。
2.如果Type(x)是Undefined,則返回true。
3.如果Type(x)爲Null,則返回true。如果X和Y指的是同一個對象
...
7.Return如此。否則,返回false。
請用jQuery或您正在使用的任何框架標記您的問題,這樣有正確知識的人就會幫助您。這不是基於您的代碼示例的通用JavaScript問題。 – SAJ14SAJ
好吧,這是一個通用的Javascript問題,因爲我問爲什麼設置x和y爲'function(){}'x === y'返回false。沒有框架與此有任何關係。我編輯我的問題,所以它更簡單。我認爲它與事實無關我想我是單元測試:) – Nope
啊,現在這是清晰可讀的。我將不得不搜索標準文檔。我不確定===函數實際上是檢查內容而不是地址。我永遠不會嘗試這樣做。你究竟在努力實施什麼? – SAJ14SAJ