JS 宽鬆相等、严格相等以及隐含转型 DAY54

严格相等
型别与内容 "皆" 需相等

// 内容一样 型别不一样 falseconsole.log(1 === '1'); // 内容一样 型别一样 trueconsole.log(1 === 1); 

若要将严格相等改成否定
需改成(!==)

// 左边的 1 是不是 跟右边的 1 不一样// 不一样 回传 trueconsole.log(1 !== '1'); // 一样 回传 falseconsole.log(1 === 1); 

少见的几种情况

console.log(NaN === NaN); //falseconsole.log(+0 === -0); //true

宽鬆相等

// 内容一样 型别不一样 trueconsole.log(1 == '1'); // 内容一样 型别一样 trueconsole.log(1 == 1); 

那它的规则是什么??

// 布林,字串 与其它型别比对会转成 "数值(Number)"console.log(1 == '1'); // 将右方转成数值1console.log(Number('1'));

ex1:

// 0x 将数值转成16进位// 0x11 --> 16 + 1console.log(17 == '0x11'); //trueconsole.log(Number('0x11')); //17

ex2:
布林 字串相比

// 左右边皆会转成数值console.log(true == 'true'); // falseconsole.log(Number('true')); // NaN

那到底要怎么转换呢??

// 我们把它改成 布林trueconsole.log(Number(true)); // 数值1所以我们应该改成这样console.log(true == '1'); // trueconsole.log(false == '0'); // trueconsole.log(true == 1); // trueconsole.log(false == 0); // true若要改成否定 !=console.log(1 != '1'); // false 

延伸案例

// 0 代表false !0 代表true// 布林比对 转成数值// console.log(Number(true)); // 1// console.log(Number('1')); // 1// 所以为trueconsole.log('1' == !0); //true

Null , Undefined
null 与 undefined 不会转成数值型别

console.log(Number(null), Number(undefined)); // 0 NaNconsole.log(null == 0); // null不会转数值 falseconsole.log(null == undefined); // trueconsole.log(null === undefined); // false

物件与非物件

// 物件与非物件比对,使用包裹物件转换console.log(Number([10]));console.log(10 == [10]); // trueconsole.log(String(['a'])); console.log('a' == ['a']); // true// 纯物件比对// 通常不会这样比对console.log(String({a: 'a'})); // [object Object]console.log('[object Object]' == {a: 'a'}) ; // true
// 物件与物件比对 是比对 "参考位置"console.log({} == {}); //falseconsole.log([] == []); //false// 延伸案例var a = [];var b = a;console.log(a === b); //true// 参考位置相同

那今天的介绍就到这里
若有任何问题 或 内容有误
都可以跟我说唷http://img2.58codes.com/2024/emoticon37.gif


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章