首先很不好意思的用了一个“判断表达式”的词,别细纠。嘿
我们用这样的一个例子开始:
0 == "" //true 0 === "" //false
显然,这样的测试没有意思。一眼就看到结果了。==是等于 ===是全等。JavaScript在逻辑判断时,如果表达式使用的是 == 那么,表达式就会被强类型转换。 而===不会干这事。所以得到了以上结果。
回到==强类型转换问题,灰鸽给我们总结的非常好,给大家分享下:
左值为数字,右值转数字。左值为字符串,右值传字符串。
这时候教主大大( Franky )说了:
左值的概念来源于 内存地址 以及其对应的值.因为描述他们总是不方便 所以才诞生左值 的概念衍生出 赋值语句 中.赋值运算符左边的表达式 evaluate后 总是产生一个左值. 在ecmascript中 喜欢用 reference type 来代替它。
如教主所云灰鸽的“左值”值得商榷。
说到这强类型转换这事,不得不提醒一个东西:
!! new String("0") -> true 但是 !! "0" -> false
!! new Array() -> true
!! [] -> true
由于文叔功力浅薄,故而暂无法跟大家细说其中缘故。就不知道看官如何意会了,嘿嘿。