飞码网-免费源码博客分享网站

点击这里给我发消息

JavaScript比较中应使用哪个等于运算符(== vs ===)?|-Javascript教程

飞码网-免费源码博客分享网站 爱上飞码网—https://www.codefrees.com— 飞码网-matlab-python-C++ 爱上飞码网—https://www.codefrees.com— 飞码网-免费源码博客分享网站

问:

我正在使用JSLint来查看JavaScript,它返回了许多建议,当做诸如在if语句里面比较idSele_UNVEHtype.value.length == 0这样的事情时,用===(三个等号)代替==(两个等号)。

用===代替==有性能上的好处吗?

答:

 严格相等运算符(===)的行为与抽象相等运算符(==)相同,不同之处在于未进行任何类型转换,并且类型必须相同才能被视为相等。

== 操作符在进行必要的类型转换后,将进行平等比较。===操作符不会进行转换,所以如果两个值的类型不一样,===将简单地返回false。两者同样快速。

JavaScript有两套平等运算符。=== 和 !==, 以及它们的邪恶孪生兄弟 == 和 !=. 好的运算符的工作方式和你预期的一样. 如果两个操作数的类型相同,并且具有相同的值,那么===产生真,而 !==产生假。当操作数类型相同时,是正确的,但如果它们的类型不同,它们就会试图胁迫数值,它们这样做的规则很复杂,而且难以记忆。这些都是一些有趣的案例

'' == '0'           // false
0 == ''             // true
0 == '0'            // true

false == 'false'    // false
false == '0'        // true

false == undefined  // false
false == null       // false
null == undefined   // true

' \t\r\n ' == 0     // true

传递性的缺乏令人震惊。 我的建议是请始终使用===!==。刚刚显示的所有比较都是false===操作员进行的。


 

var a = [1,2,3];
var b = [1,2,3];

var c = { x: 1, y: 2 };
var d = { x: 1, y: 2 };

var e = "text";
var f = "te" + "xt";

a == b            // false
a === b           // false

c == d            // false
c === d           // false

e == f            // true
e === f           // true

特殊情况是,当您比较一个基元和一个对象时,由于该对象toStringvalueOf方法的原因,该对象的结果等于相同的基元。例如,考虑将字符串基元与使用String构造函数创建的字符串对象进行比较。

"abc" == new String("abc")    // true
"abc" === new String("abc")   // false

在这里,==操作员正在检查两个对象的值并返回true,但是===看到它们不是同一类型并返回false。哪一个是正确的?这确实取决于您要比较的内容。我的建议是完全绕过该问题,只是不要使用String构造函数从字符串文字中创建字符串对象。

飞码网-免费源码博客分享网站 爱上飞码网—https://www.codefrees.com— 飞码网-matlab-python-C++ 爱上飞码网—https://www.codefrees.com— 飞码网-免费源码博客分享网站
赞 ()
内容页底部广告位3
留言与评论(共有 0 条评论)
   
验证码: