【Day15】宽松相等、严格相等以及隐含转型

宽松相等( == )

会进行型别转换後,再对值进行比较

严格相等( === )

会比较型别和值是否相同,因此不会有型别转换发生

范例:

字串、布林会被转型为数值後,才进行比较,

我们可以使用 Number() 查看转型後的值

// 1、'1'
console.log(Number('1'));  // 1
console.log(1 == '1');  // true
console.log(1 === '1');  // false

// true、1
console.log(Number(true));  // 1
console.log(true == 1);  // true
console.log(true === 1);  // false

// true、'true'
console.log(Number(true));  // 1
console.log(Number('true'));  // NaN 
console.log(true == 'true');  // false

// '1'、!0
console.log(!0);  // true
console.log(Number(!0));  // 1
console.log('1' == !0);  // true

// NaN、NaN
console.log(NaN == NaN);  // false

// null、undefined 不会被转为数值进行比较
console.log(Number(null));  // 0
console.log(Number(undefined));  // NaN
console.log(null == undefined);  // true
console.log(null === undefined);  // false

物件和非物件的比较,会使用包裹物件进行转型之後,才进行比较

// 100、[100]
console.log(Number([100]));  // 100
console.log(100 == [100]);  // true

// 'a'、['a']
console.log(String(['a']));  // 'a'
console.log('a' == ['a']);  // true

// {a: 'a'}、'[object Object]'
console.log(String({a: 'a'}));  // '[object Object]'
console.log({a: 'a'} == '[object Object]');  // true

物件与物件比较是依据参考位置来决定的,

也就是根据记忆体位址是否相同来进行比较

// {}、{}
console.log({} == {});  // false

// []、[]
console.log([] == []);  // false

物件和物件比较也是有回传 true 的时候

let a = ['weiwei'];
let b = a;  // 此时 b 和 a 指向相同记忆体位址
console.log(a == b);  // true
console.log(a === b);  // true

图解:

其他更多物件的比较我们等到开始讲解物件时,再进行说明

如果想了解更多关於宽松相等和严格相等的回传结果能到 JS Comparison TableOh My Dear JavaScript 查看

Truthy 与 Falsy

Truthy 与 Falsy 主要是在 if 判断式内比对是否为 truefalse

假值(Falsy)

假值(Falsy)包含 false0""nullundefinedNaN

转型成布林值为 false

真值(Truthy)

假值以外全都是真值,主要是用来判断转型成布林值时,

值是否为 true,相关说明可到 MDN 参考文件 查看

// ''
// 回传结果 '执行 else'
console.log(Boolean(''));  // false
if ('') {
    console.log('执行 if');
} else {
    console.log('执行 else');
}

// ' ',字串中加空格
// 回传结果 '执行 if'
console.log(Boolean(' '));  // true
if (' ') {
    console.log('执行 if');
} else {
    console.log('执行 else');
}

// undefined
// 回传结果 '执行 else'
console.log(Boolean(undefined));  // false
if (undefined) {
    console.log('执行 if');
} else {
    console.log('执行 else');
}

如果要查询值为真值(Truthy)或假值(Falsy)时,可到 JS Comparison Table 中的 if() 查看

以上就是今天的内容,感谢观看!!


<<:  [Day 10 ]资料和资料之间的多对多关联

>>:  服务器运作简介

Day11 - Button(一)

今天来学最常用到也最实用的Button按钮元件 我们经常需要点击按钮来做某个或多个事件 这时就需要设...

用 Python 畅玩 Line bot - 27:爬虫(二)

接续前篇,一般爬虫时抓出的资料量多还没什麽关系,但这次我们是想要让使用者在 line 上使用,一次给...

Day1 - 前言

前言 大家好,目前我学过C、java、lua等语言,但在android设计上还只能算是一名初学者,因...

[Day 30] Tips for Lazy Loading Images

Lazy loading 是广为人知的网页优化技巧,尤其应用在图片上时能够大幅减少效能和流量的浪费,...

Day14:插曲(小结)

回顾 socket.io 的基本应用的已经告一小段落,因为自己实在不爱打原理论述的内容,所以到目前为...