首页 > 编程语言 >在JavaScript比较中,应该使用哪个等号运算符(== vs ===)?

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

时间:2023-10-09 21:27:34浏览次数:41  
标签:false String JavaScript 运算符 vs var true

内容来自 DOC[ https://q.houxu6.top/?s=在JavaScript比较中,应该使用哪个等号运算符(== vs =)?](https://q.houxu6.top/?s=在JavaScript比较中,应该使用哪个等号运算符( vs ===)?)

我正在使用JSLint来检查JavaScript代码,并且它返回了许多建议,建议在if语句中比较idSele_UNVEHtype.value.length == 0时,将==(两个等号)替换为===(三个等号)。

==替换为===会有什么性能优势吗?

如果没有任何类型转换发生,那么与==相比是否会有性能提升?


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

参考资料:JavaScript教程:比较运算符

==运算符会在进行任何必要的类型转换后进行相等性比较。===运算符不会进行转换,因此如果两个值的类型不同,===将简单地返回false。两者的速度都很快。

引用道格拉斯·克罗克福德(Douglas Crockford)出色的《JavaScript:好东西》(JavaScript: The Good Parts),

JavaScript有两种相等运算符集:===!==,以及它们的邪恶双胞胎==!=。好的运算符按照你预期的方式工作。如果两个操作数具有相同的类型和相同的值,则===产生true!==产生false。邪恶的双胞胎在操作数具有相同的类型时起作用,但如果它们具有不同的类型,它们会尝试强制转换值。它们执行此操作的规则是复杂且难以记忆的。以下是一些有趣的情况:

'' == '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

对于对象,=====在彼此之间保持一致(除了特殊情况)。

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://262.ecma-international.org/5.1/#sec-11.9.3

标签:false,String,JavaScript,运算符,vs,var,true
From: https://www.cnblogs.com/xiaomandujia/p/17753164.html

相关文章

  • 在JavaScript中遍历数组的循环(对于每个)
    内容来自DOChttps://q.houxu6.top/?s=在JavaScript中遍历数组的循环(对于每个)我可以使用JavaScript遍历数组中的所有条目吗?TL;DR你最好选择通常的方法是:使用for-of循环(ES2015+只支持;规范|MDN)-简单且适用于async。for(constelementoftheArray){//.......
  • 运算符
    1.算术允许符2.赋值运算符3.关系运算符4.逻辑运算符5.位运算符6.扩展赋值运算符7.三元运算符(条件运算符)......
  • Java运算符
    算术运算符加法运算符(+):用于将两个值相加。减法运算符(-):用于从一个值中减去另一个值。乘法运算符(*):用于将两个值相乘。除法运算符(/):用于将一个值除以另一个值。取模运算符(%):用于计算两个值相除后的余数。运算符描述示例+相加2+3=5-相减5-2=3*相乘2*3=6/......
  • Win10安装VSCode并配置Python环境(完美避开踩过的所有坑)
    安装VScode下载vscode下载链接:https://code.visualstudio.com/Download根据自己的电脑型号下载对应的版本。我下载的是windows/UserInstaller,但是使用时会提示“”。所以,推荐下载SystemInstaller版本。两者区别可以自行百度,或......
  • VS code+python环境部署
    安装VScode下载vscode下载链接:https://code.visualstudio.com/Download根据自己的电脑型号下载对应的版本。我下载的是windows/UserInstaller,但是使用时会提示“”。所以,推荐下载SystemInstaller版本。两者区别可以自行百度,或......
  • 2023-01-05vscode技巧
    csharp程序不能输入用vscode运行csharp默认使用的terminal是不支持输入的,输入没反应需要修改launch.json增加这两行我估计是关闭了什么东西,并且调用系统的terminal,具体就不懂了。"configurations":[{//Formoreinformationaboutthe'console'field,se......
  • TypeScript与JavaScript比较(区别)
     TypeScript和JavaScript是目前项目开发中较为流行的两种脚本语言,TypeScript是JavaScript的一个超集,但是TypeScript与JavaScript之间又有什么样的区别呢?在选择开发语言时,又该如何抉择呢?本文将会深入对比这两种语言,讨论两种语言之间的关联和差异,并概述两种语言各自的优势......
  • 文心一言 VS 讯飞星火 VS chatgpt (109)-- 算法导论10.1 7题
    七、用go语言,说明如何用两个队列实现一个栈,并分析相关栈操作的运行时间。文心一言:在Go语言中,我们可以用两个队列(queue1和queue2)实现一个栈。以下是实现代码:packagemainimport"fmt"typeQueuestruct{items[]int}func(q*Queue)Enqueue(itemint......
  • LORA射频开关芯片ATR5179 VS PE4259 单刀双掷开关单芯片
    PE4259UltraCMOS@射频开关是专为涵盖10兆赫-3000兆赫的广泛应用。这款反射式开关集成了具有低电压的板上CMOS控制逻辑CMOS兼容的控制接口,并可将使用单引脚或互补引脚控制控制的输入端。ATR5179是一款采用pHEMTGaAs工艺制作的单刀双掷开关单芯片,芯片内部电路结构简单,该芯片的推......
  • 利用 Javascript 生成数字序列
    <!DOCTYPEhtml><html><head><title>生成数字序列</title></head><body><h1>Element对象之innerHTML属性</h1><pid="demo"onclick="myFunction()">点击生成数字序列</p><script>funct......