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

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

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

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

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

少见的几种情况

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

宽松相等

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

那它的规则是什麽??

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

ex1:

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

ex2:
布林 字串相比

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

那到底要怎麽转换呢??

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

若要改成否定 !=
console.log(1 != '1'); // false 

延伸案例

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

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

console.log(Number(null), Number(undefined)); // 0 NaN
console.log(null == 0); // null不会转数值 false
console.log(null == undefined); // true
console.log(null === undefined); // false

物件与非物件

// 物件与非物件比对,使用包裹物件转换
console.log(Number([10]));
console.log(10 == [10]); // true
console.log(String(['a'])); 
console.log('a' == ['a']); // true

// 纯物件比对
// 通常不会这样比对
console.log(String({a: 'a'})); // [object Object]
console.log('[object Object]' == {a: 'a'}) ; // true
// 物件与物件比对 是比对 "参考位置"
console.log({} == {}); //false
console.log([] == []); //false

// 延伸案例
var a = [];
var b = a;
console.log(a === b); //true
// 参考位置相同

那今天的介绍就到这里
若有任何问题 或 内容有误
都可以跟我说唷/images/emoticon/emoticon37.gif


<<:  前端工程学习日记第6天

>>:  [PHP] [Laravel] [Blade] 利用正规表示法,根据不同的网址,显示特定的元素。

Day10 - 为什麽官方不推荐使用 getInitialProps

getInitialProps 是较为老旧的 API Next.js 9.3 版本後,官方释出了两个...

Day29 - Float

Float float:用来将区块并排时可以使用,当设定浮动时,其父层会抓不到子层的高度 left:...

[Day07] TS:什麽是 Utility Types?

上面这个是今天会提到的内容,如果你已经可以轻松看懂,欢迎直接左转去看我同事 Andy 「前端工程师...

Day#13 登入画面(2)

前言 昨天成功的放上imageView以及标题,今天来把其他的栏位放上~ 登入栏位 LoginVie...

视觉化平台规划

昨天测试完API的第一步之後, 我突然想到我还没说视觉化平台的整个规划, 今天就来谈谈这整个专案的规...