在这里的答案中,我什么都没有读到什么相等的意思。有人会说这===
意味着相等且属于同一类型,但这不是真的。实际上,这意味着两个操作数都引用相同的对象,或者在值类型的情况下,它们具有相同的value。
因此,让我们采用以下代码:
var a = [1,2,3];
var b = [1,2,3];
var c = a;
var ab_eq = (a === b); // false (even though a and b are the same type)
var ac_eq = (a === c); // true
和这里一样:
var a = { x: 1, y: 2 };
var b = { x: 1, y: 2 };
var c = a;
var ab_eq = (a === b); // false (even though a and b are the same type)
var ac_eq = (a === c); // true
甚至:
var a = { };
var b = { };
var c = a;
var ab_eq = (a === b); // false (even though a and b are the same type)
var ac_eq = (a === c); // true
这种现象并不总是很明显。故事不只是平等和同类型。
规则是:
对于值类型(数字):
a === b
如果a
和b
具有相同的值并且属于相同的类型,则返回true
对于引用类型:
a === b
如果a
和b
引用完全相同的对象,则返回true
对于字符串:
a === b
如果a
和b
均为字符串且包含完全相同的字符,则返回true
字符串:特例...
字符串不是值类型,但是在Javascript中它们的行为类似于值类型,因此,当字符串中的字符相同且长度相同时,它们将“相等”(如第三条规则所述)
现在变得有趣了:
var a = "12" + "3";
var b = "123";
alert(a === b); // returns true, because strings behave like value types
但是呢?:
var a = new String("123");
var b = "123";
alert(a === b); // returns false !! (but they are equal and of the same type)
我以为字符串的行为类似于值类型?好吧,这取决于您询问的人...在这种情况下,a和b不是同一类型。a
是类型的Object
,b
而是类型的string
。只需记住,使用String
构造函数创建字符串对象会创建某种类型的东西,大多数情况下,Object
它们的行为类似于字符串。
=== vs ==
,但在PHP中,可以在这里阅读:stackoverflow.com/questions/2401478/why-is-faster-than-in-php/...