看看这里:http://longgoldenears.blogspot.com/2007/09/triple-equals-in-javascript.html
3个等号表示"没有类型强制的平等".使用三等于,值也必须在类型上相等.
0 == false // true 0 === false // false, because they are of a different type 1 == "1" // true, automatic type conversion for value only 1 === "1" // false, because they are of a different type null == undefined // true null === undefined // false '0' == false // true '0' === false // false
谢谢你的答案!我想如果与C#相比,==也将==和===将转换为.Equals() (82认同)
@ hrishikeshp19:在这种情况下,值实际上是不同的(不同的对象引用) (40认同)
@KoenZomers我不认为你的C#案例是对的.实际上C#中没有等价物.==在C#中做一个引用比较,而Equals做预定义的比较,它们都没有JavaScript中的等价物. (19认同)
那么"new String()=== new String()",值和类型都是一样的.但声明返回false. (12认同)
@ hrishikeshp19,`new String()`不是字符串类型,它是对象类型,因此对象的===规则适用.但是,原始字符串的使用通常会导致将字符串强制转换为"String"对象,因此差异很小.如果要将`new String()`分配给两个不同的对象`s1`和`s2`,则每个对象的`valueOf()`方法将为每个对象返回一个字符串原语,并且`s1.valueOf()== = s2.valueOf()`将返回`true`. (3认同)
有人可以解释为什么`true =="true"``是'false`? (3认同)
Jack Sleight.. 1170
===
并且!==
是严格的比较运算符:
JavaScript具有严格和类型转换相等比较.为了
strict
相等,被比较的对象必须具有相同的类型,并且:
两个字符串在相应位置具有相同的字符序列,相同的长度和相同的字符时严格相等.
两个数字在数值上相等(具有相同的数值)时严格相等.
NaN
不等于任何东西,包括NaN
.正负零彼此相等.如果两个布尔操作数都为真或两者都为假,则它们严格相等.
如果两个对象的引用相同,则两个对象严格相等
Object
.
Null
和Undefined
类型是==
(但不是===
).[即(Null==Undefined
)是true
但是(Null===Undefined
)是false
]
比较运算符 - MDC
看看这里:http://longgoldenears.blogspot.com/2007/09/triple-equals-in-javascript.html
3个等号表示"没有类型强制的平等".使用三等于,值也必须在类型上相等.
0 == false // true 0 === false // false, because they are of a different type 1 == "1" // true, automatic type conversion for value only 1 === "1" // false, because they are of a different type null == undefined // true null === undefined // false '0' == false // true '0' === false // false
===
并且!==
是严格的比较运算符:
JavaScript具有严格和类型转换相等比较.为了
strict
相等,被比较的对象必须具有相同的类型,并且:
两个字符串在相应位置具有相同的字符序列,相同的长度和相同的字符时严格相等.
两个数字在数值上相等(具有相同的数值)时严格相等.
NaN
不等于任何东西,包括NaN
.正负零彼此相等.如果两个布尔操作数都为真或两者都为假,则它们严格相等.
如果两个对象的引用相同,则两个对象严格相等
Object
.
Null
和Undefined
类型是==
(但不是===
).[即(Null==Undefined
)是true
但是(Null===Undefined
)是false
]
比较运算符 - MDC