JavaScript
中提供==
相等运算符与===
严格相等运算符,建议是只要变量的数据类型能够确定,一律使用===
。
==相等运算符
==
在判断相等时会进行隐式的类型转换, 其比较遵循一些原则,即先转换类型再比较
- 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值,即是调用
Number()
方法 - 如果一个操作数是字符串,另一个是数值,在比较相等性之前先将字符串转换为数值,同样调用
Number()
方法 - 如果一个操作数是对象,另一个操作数不是,则调用对象的
valueOf()
和toString()
方法把对象转换成基础类型的值再比较,除Date
对象外,会优先尝试使用valueOf()
方法,用得到的基本类型按照前面的规则进行比较。 - 以及
null == undefined
,此外任何其他组合,都不相等。1 == true //true // Number Boolean 2 == true //false 1 == "1" //true // Number String [] == "" //true // Object String [] == false // true // Object Boolean [] == 0 //true // Object Number [] == {} //false [] == [] //false {} == {} //false null == undefined //true
在使用的时候可能会出现一些问题
0 == "0" //true 0 == [] //true "0" == [] // false
如果是直接实现了
valueOf()
与toString()
的方法,而不是调用原型链上的Object.prototype.valueOf()
与Object.prototype.toString()
方法,甚至能够产生异常。var obj = {valueOf: function(){ return {} }, toString: function(){ return {}}} console.log(obj == 0) // Uncaught TypeError: Cannot convert object to primitive value
===严格相等运算符
===
先判断类型再比较,类型不同直接不相等ES6
数据类型有Number
、String
、Boolean
、Object
、Symbol
、null
和undefined
。1 === true //false 1 === "1" //false [] === "" //false null === undefined //false
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/114788.html<