`

JavaScript Garden - 相等与比较

阅读更多

相等与比较

JavaScript 有两种方式判断两个值是否相等。

等于操作符

等于操作符由两个等号组成:==

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

上面的表格展示了强类型转换,这也是使用 == 被广泛认为是不好编程习惯的主要原因,
由于它的复杂转换规则,会导致难以跟踪的问题。

此外,强制类型转换也会带来性能消耗,比如一个字符串为了和一个数组进行比较,必须事先被强制转换为数字。

严格等于操作符

严格等于操作符由个等号组成:===

不想普通的等于操作符,严格等于操作符不会进行强制类型转换。

""           ===   "0"           // false
0            ===   ""            // false
0            ===   "0"           // false
false        ===   "false"       // false
false        ===   "0"           // false
false        ===   undefined     // false
false        ===   null          // false
null         ===   undefined     // false
" \t\r\n"    ===   0             // false

上面的结果更加清晰并有利于代码的分析。如果两个操作数类型不同就肯定不相等也有助于性能的提升。

比较对象

虽然 == 和 === 操作符都是等于操作符,但是当其中有一个操作数为对象时,行为就不同了。

{} === {};                   // false
new String('foo') === 'foo'; // false
new Number(10) === 10;       // false
var foo = {};
foo === foo;                 // true

这里等于操作符比较的不是值是否相等,而是是否属于同一个身份;也就是说,只有对象的同一个实例才被认为是相等的。
这有点像 Python 中的 is 和 C 中的指针比较。

结论

强烈推荐使用严格等于操作符。如果类型需要转换,应该在比较之前显式的转换,
而不是使用语言本身复杂的强制转换规则。

2
1
分享到:
评论

相关推荐

    PHP, MySQL & JavaScript All-in-One For Dummies epub

    PHP, MySQL & JavaScript All-in-One For Dummies 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书

    javascript-xpath-latest.js

    javascript-xpath, 虽然比firefox还是慢,但也快多了,上面的例子只需要不 到1秒。换法很简单,如下: selenium = new DefaultSelenium(location, port, browser, targetPath); selenium.start(); selenium....

    javascript garden

    ### JavaScript Garden:深入探讨JavaScript中的陷阱与注意事项 #### 引言 《JavaScript Garden》是一份不断更新、详尽记录了JavaScript编程语言中最易犯错误、陷阱及细微问题的指南。该文档不仅帮助开发者规避常见...

    cookie-garden-helper:在游戏中使您的花园自动化Cookie Clicker

    LoadMod ( 'https://rawgit.com/yannprada/cookie-garden-helper/master/cookie-garden-helper.js' ) ; } ( ) ) ; 这个怎么运作 首先,点击花园/农场底部的“ Cookie Garden Helper ”按钮。 在这里,您可以配置您...

    JavaScript教程--从入门到精通

    JavaScript教程--从入门到精通

    JavaScript_Garden_CN

    4. **类型**: 探讨了相等与比较、`typeof`操作符、`instanceof`操作符、类型转换等,这些都是处理数据类型时必须理解的概念。 5. **核心概念**: 强调了避免使用`eval`的重要性,解释了`undefined`和`null`的区别,...

    javascript基础--传智播客--蔡世友

    javascript基础--传智播客--蔡世友

    JavaScript教程--从入门到精通 PPT [免费版]

    javascript是由Netscape公司开发并随Navigator导航者一起发布的、介于Java与HTML之间、基于对象事件驱动的编程语言,正日益受到全球的关注。因它的开发环境简单,不需要Java编译器,而是直接运行在Web浏览器中,而因...

    JavaScript教程--从入门到精通(PPT精简版)

    JavaScript 教程--从入门到精通(PPT 精简版) 本节课程为初学者提供了 JavaScript 的基本概念、特点、优点和编程技术,旨在帮助学习者快速掌握 JavaScript 的基础知识和编程技能。 一、JavaScript 概述 JavaScript...

    org.mozilla.javascript-1.7.2.jar

    《深入解析org.mozilla.javascript-1.7.2.jar》 在Java开发中,JavaScript引擎的使用日益广泛,其中Mozilla的Rhino引擎是备受开发者青睐的一款。本文将围绕"org.mozilla.javascript-1.7.2.jar"这个资源包,详细讲解...

    javascript教程--从入门到精通

    javascript教程--从入门到精通_ppt

    JavaScript圣经-黄金版_part3of5

    JavaScript Bible - Gold Edition.pdf JavaScript圣经-黄金版

    廖雪峰-JavaScript教程-PDF版

    尽管JavaScript在语法上与Java有些相似,但实际上两者并无太大关联。 随着JavaScript的广泛应用,ECMA(欧洲计算机制造商协会)组织制定了JavaScript的标准规范——ECMAScript。ECMAScript定义了JavaScript的核心...

Global site tag (gtag.js) - Google Analytics