Js中==与===
2021-03-28 16:27
标签:lang function lan pre cannot efi 数据 直接 code 在使用的时候可能会出现一些问题 如果是直接实现了 Js中==与=== 标签:lang function lan pre cannot efi 数据 直接 code 原文地址:https://www.cnblogs.com/WindrunnerMax/p/12619512.htmlJs中==与===
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
if
if()
也可以看作是一个单独的运算符类别if(true) console.log("exec"); //exec
if(false) console.log("exec");
if(1) console.log("exec"); //exec
if(0) console.log("exec");
if(-1) console.log("exec"); //exec
if("true") console.log("exec"); //exec
if("1") console.log("exec"); //exec
if("0") console.log("exec"); //exec
if("") console.log("exec");
if(null) console.log("exec");
if(undefined) console.log("exec");
if("null") console.log("exec"); //exec
if("undefined") console.log("exec"); //exec
if([]) console.log("exec"); //exec
if({}) console.log("exec"); //exec
if([0]) console.log("exec"); //exec
if(NaN) console.log("exec");
参考
https://www.zhihu.com/question/31442029
https://dorey.github.io/JavaScript-Equality-Table/#three-equals
上一篇:html上传图片后不显示图片