在 JavaScript 比较中应该使用哪个等于运算符 (== vs ===)?

如何解决在 JavaScript 比较中应该使用哪个等于运算符 (== vs ===)?

除了不进行类型转换之外,严格相等运算符 ( ===) 的行为与抽象相等运算符 ( ==) 相同,并且类型必须相同才能被视为相等。

==运营商将比较平等做任何必要的类型转换之后。该===运营商将进行转换,因此,如果两个值是不一样的类型===将简单地返回false。两者都一样快。

JavaScript 有两组相等运算符:===and !==,以及它们的邪恶双胞胎==and !=。好的方法会按照您期望的方式工作。如果两个操作数的类型和值相同,则===产生true!==产生false。当操作数是相同类型时,邪恶双胞胎会做正确的事情,但如果它们是不同类型,它们会尝试强制转换值。他们这样做的规则既复杂又难以记住。这些是一些有趣的案例:

```js ‘’ == ‘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构造函数从字符串文字创建字符串对象。

使用==运算符 ( Equality )

true == 1; //true, because 'true' is converted to 1 and then compared
"2" == 2;  //true, because "2" is converted to 2 and then compared

使用===运算符 ( Identity )

true === 1; //false
"2" === 2;  //false

这是因为,这意味着解释器会在比较之前隐式地尝试转换值。

另一方面,,因此在比较时不会转换值,因此跳过一个步骤会更快

解决方法

我正在使用JSLint来检查 JavaScript,并且在执行诸如在语句内部进行比较之类的操作时,它会返回许多建议将==(两个等号)替换为===(三个等号)。idSele_UNVEHtype.value.length == 0``if

有没有性能优势,以代替=====

由于存在许多比较运算符,因此任何性能改进都会受到欢迎。

如果不发生类型转换,性能会不会比==?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?