EddieGDY
谈谈对于Javascript中==“和”===的区别 有不正确的请大家指导评论
首先 先要知道 ==“和”===的概念
两者都是关系运算符 ,结果为布尔值true和false
===叫做严格运算符
== 叫做相等运算符
区别
==表示只要值相等即为真true (单纯地比较值)
===不仅要求值相等,两边的类型也要相同(不仅要比较值还要比较数据类型)
先从 “==” 叫做相等运算符"来说
1 如果 == 两边的值是相同类型会进行===比较返回的是
===的值
2如果 == 两边的值类型不同,也有可能返回true
1 == "1" // true
3如果一个值是null另一个值是undefined返回true
null == null // true
undefined == undefined // true
console.log(null==undefined) //结果为true
4 如果一个值是string类型另一个是number类型会先把string类型转化成number类型在进行比较
console.log("1"==1); //结果为true
//string类型"1"转化为数值1 与1进行比较
5 如果一个值是true 会把他转化成1再比较 false会转化成0
true == "20" // false
console.log(true=="1"); //这里的输出结果为true
//因为类型不等 true 转化为数值1 再把"1"转化为1 比较1==1 结果相等为true
console.log(false=="0"); //这里的输出结果为true
//因为类型不等 false 转化为数值0 再把"0"转化为0 比较0==0 结果相等为true
//
6如果一个值是Object类型 另一个是number类型或者string类型 会把Object 用valueOf()或者toString() 转成原始类型 在进行比较
let arr = [1,2];
let obj = "1,2";
console.log(arr == obj); //内部执行valueOf(),将arr值转化为原始值,但是arr并没有变化,显示true
再从**"==="**叫做严格运算符说
1要是两个值类型不同,返回false
1 === "1" // false
2要是两个值都是number类型,并且数值相同,返回true
1 === 1 // true
3要是两个值都是stirng,并且两个值的String内容相同,返回true
'a' === 'a' // true
4要是两个值都是true或者都是false,返回true
true===true // true
false===false // true
5要是两个值都是指向相同的Object,Array或者function,返回true
对于Array,Object等高级类型==‘和’===是没有区别的进行“指针地址”比较
6要是两个值都是null或者都是undefined,返回true
null === null // true
undefined === undefined // true
null === undefined // false
特别注意:
//无论是==还是===NaN和所有值包括自己都不相等。
NaN == NaN // false
NaN === NaN // false