【实例】详解JS中==和===、!=和!==的使用区别
作者:admin 时间:2022-5-24 23:15:39 浏览:JavaScript条件判断中,双等号“==”和三等号“===”都是用来比较两者是否相等的符号,多数情况下,我们都是用“==”,但是有时我们也看到有人用“===”,我之前也不太详究,认为使用“==”就足够了,完全用不到“===”。其实,这种想法是不对的,编写程序应该是严谨的,使用“===”肯定有它的理由,并且是“==”不可代替的。今天,我又看到了有个实例代码里使用了“===”,我决定认真学习一下,了解和懂得“==”与“===”的使用区别。

==和===之间的区别
==和===的区别在于:
- == 在执行比较之前将变量值转换为相同的类型。这称为类型强制。
- === 不进行任何类型转换(强制),并且仅当被比较的两个变量的值和类型都相同时才返回true 。
何时在 JavaScript 中使用 ==?
Javascript 中的双等号 (==) 类似于三等号 (===) 运算符,因为它们被视为比较运算符。但是,==(双重相等)运算符用于查找抽象相等。这意味着双等号 (==) 执行类型转换以供使用,然后比较两个值。
下面的示例将返回 true,因为双等号运算符将执行称为类型强制的操作,将两个值转换为相同的类型并进行比较。
if (100 == '100') {
//等式成立
}再看下面一个示例
var one = 1;
var one_again = 1;
var one_string = "1"; // 注:这是一个字符串
console.log(one == one_again); // true
console.log(one === one_again); // true
console.log(one == one_string); // true. 看下面解释.
console.log(one === one_string); // false. 看下面解释.
第 7 行:console.log(one == one_string)返回true因为两个变量one和one_string包含相同的值,即使它们具有不同的类型:one的类型是Number,而one_string是字符串,但是由于==操作符进行了类型转换,所以结果为true。
第 8 行:console.log(one === one_string)返回false,因为两个变量的类型不同。
何时使用此运算符取决于你的程序。如果你预见到类型转换会破坏代码,你可能需要使用(===) 运算符。
何时在 JavaScript 中使用 ===?
三等号 (===) 运算符在 JavaScript 中被认为是严格的比较运算符。当你想要比较两个值并考虑类型时,你将使用此运算符。使用前面的示例,你会得到相反的响应。
if (100 === '100') {
//等式不成立
}===比==快吗?
理论上,当比较具有相同类型的变量时,两个运算符的性能应该相似,因为它们使用相同的算法。当类型不同时,三等号运算符 ( ===) 应该比双等号 ( ==) 执行得更好,因为它不必执行类型强制的额外步骤。
但是如果你仔细想想,性能是完全无关紧要的,不应该在决定何时使用一个运算符而不是另一个时发挥作用。要么你需要类型强制,要么你不需要。如果你不需要它,请不要使用双等号运算符 ( ==),因为你可能会得到意想不到的结果。例如,"1" == true或"" == 0将返回true,再如下面的示例:
0 == false // true
0 === false // false 它们类型不同
1 == "1" // true 类型被强制转换
1 === "1" // false 它们类型不同
null == undefined // true
null === undefined // false
'0' == false // true
'0' === false // false
简而言之,除非你需要类型强制(在这种情况下,请使用==) ,否则请始终在任何地方都使用===。
不等式运算符:!= 和 !==
与双等号和三等号对应的,是这两个不等式运算符:!= 和 !==:
- !=: 如果变量是不同类型,则在检查不等式之前转换值
- !==: 检查被比较的两个变量的类型和值
示例
var one = 1;
var one_again = 1;
var one_string = "1"; // 注: 这是一个字符串
console.log(one != one_again); // false
console.log(one != one_string); // false
console.log(one !== one_string); // true. 类型不同
相等运算符和对象(以及其他引用类型)
到目前为止,我们一直在探索使用原始类型的等式或不等式运算符。像Arrays或Objects这样的引用类型呢?如果我们创建两个具有相同内容的数组,我们是否可以使用相等运算符来比较它们?答案是否定的,你不能。我们来看一个例子:
var a1 = [1,2,3,4,5]
var a2 = [1,2,3,4,5]
console.log(a1 == a2); // false
console.log(a1 === a2); // false
在这里, ==和===返回相同的答案:false。这里发生的是a1都a2指向内存中的不同对象。尽管数组内容相同,但它们本质上具有不同的值。同样适用于对象和其他引用类型。
总结
通过前面的简单示例说明,现在你应该了解和懂得 JavaScript 中 “==”和“===” 运算符以及“!=”和“!==”不等号的区别了吧,最主要是要清楚何时使用哪一个。



