【实例】详解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 中 “==
”和“===
” 运算符以及“!=
”和“!==
”不等号的区别了吧,最主要是要清楚何时使用哪一个。
您可能对以下文章也感兴趣
- 站长推荐