2018-07-11 一篇關(guān)于if(xx)和 a==b的判斷的博客

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness

ps: 這個(gè)部分感覺真的很奇葩

part one 關(guān)于== 與 ===

嚴(yán)格相等 ===:

在日常中使用全等操作符幾乎總是正確的選擇。全等操作符比較兩個(gè)值是否相等,兩個(gè)被比較的值在比較前都不進(jìn)行隱式轉(zhuǎn)換。如果兩個(gè)被比較的值具有不同的類型,這兩個(gè)值是不全等的。否則,如果兩個(gè)被比較的值類型相同,值也相同,并且都不是 number 類型時(shí),兩個(gè)值全等。最后,如果兩個(gè)值都是 number 類型,當(dāng)兩個(gè)都不是 NaN,并且數(shù)值相同,或是兩個(gè)值分別為 +0 和 -0 時(shí),兩個(gè)值被認(rèn)為是全等的。

var num = 0;
var obj = new String("0");
var str = "0";
var b = false;

console.log(num === num); // true
console.log(obj === obj); // true
console.log(str === str); // true

console.log(num === obj); // false
console.log(num === str); // false
console.log(obj === str); // false
console.log(null === undefined); // false
console.log(obj === null); // false
console.log(obj === undefined); // false

非嚴(yán)格相等 ==

相等操作符比較兩個(gè)值是否相等,在比較前將兩個(gè)被比較的值轉(zhuǎn)換為相同類型。在轉(zhuǎn)換后(等式的一邊或兩邊都可能被轉(zhuǎn)換),最終的比較方式等同于全等操作符 === 的比較方式。 相等操作符滿足交換律。


image.png

一般而言,根據(jù) ECMAScript 規(guī)范,所有的對(duì)象都與 undefined 和 null 不相等。

var num = 0;
var obj = new String("0");
var str = "0";
var b = false;

console.log(num == num); // true
console.log(obj == obj); // true
console.log(str == str); // true

console.log(num == obj); // true
console.log(num == str); // true
console.log(obj == str); // true
console.log(null == undefined); // true

// both false, except in rare cases
console.log(obj == null);
console.log(obj == undefined);

part two 關(guān)于if的判斷

基本:對(duì)于括號(hào)里的表達(dá)式,會(huì)被強(qiáng)制轉(zhuǎn)換為布爾類型
先上原理


image.png

// 題目1:如下代碼輸出什么?
if ("hello") {
console.log("hello")
}
output: hello/ 非空字符串條件為真

// 題目2:如下代碼輸出什么?
if ("") {
console.log('empty')
}
if 語句不執(zhí)行,空字符串為false

// 題目3:如下代碼輸出什么?
if (" ") {
console.log('blank')
}
同題目一,非空字符串為真。
// 題目4:如下代碼輸出什么?
if ([0]) {
console.log('array')
}
數(shù)組為object,為真,

if('0.00'){
console.log('0.00')
}
非空字符串,為真。

part three == 的判斷

image.png

對(duì)于數(shù)字來說 0 就是false,
"" == 0 //題目1
兩邊都是false,因此結(jié)果為true
" " == 0 //題目2
空白字符轉(zhuǎn)換(tonumber)后為0, 結(jié)果為true
"" == true //題目3
結(jié)果false,空字符串為false
"" == false //題目4
結(jié)果為true 理由同上
" " == true //題目5
結(jié)果為false,同題目2
!" " == true //題目6
除了空字符串為false;其他都為true,true取反為false
!" " == false //題目7
同上
"hello" == true //題目8
hello轉(zhuǎn)換為數(shù)字為NAN,因此不為true
"hello" == false //題目9
hello轉(zhuǎn)換為數(shù)字為NAN,因此也不為false
"0" == true //題目10
"0"轉(zhuǎn)換成數(shù)字為0,因此為false
"0" == false //題目11
為true
"00" == false //題目12
為true
"0.00" == false //題目13
為true
undefined == null //題目14
結(jié)果為true; 死記硬背把
{} == true //題目15
結(jié)果為false,里面無tovalue 只是一個(gè)空的字符串
[] == true //題目16
同上,空數(shù)組。
var obj = {
a: 0,
valueOf: function(){return 1}
}
valueof 得到1,就拿1和這些判斷
obj == "[object Object]" //題目17
false,1!= "[object Object]"
obj == 1 //題目18
true
obj == true //題目19
true
總結(jié): 估計(jì)也只能面試筆試的時(shí)候用的上了,實(shí)際工作中估計(jì)難得用上

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,546評(píng)論 0 13
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,545評(píng)論 19 139
  • if條件判斷 if...else 條件判斷的語法如下:if (條件){當(dāng)條件為 true 時(shí)執(zhí)行的代碼}else{...
    Zouch在路上閱讀 518評(píng)論 0 0
  • 前言 最先接觸編程的知識(shí)是在大學(xué)里面,大學(xué)里面學(xué)了一些基礎(chǔ)的知識(shí),c語言,java語言,單片機(jī)的匯編語言等;大學(xué)畢...
    oceanfive閱讀 3,382評(píng)論 0 7
  • 我的床上擺放著我的臭襪子,那確實(shí)是一個(gè)畸形的字,講述著我和一個(gè)陌生女人的事。今天不一定是星期日,但今天我撿到了一根...
    李一十八閱讀 271評(píng)論 0 0

友情鏈接更多精彩內(nèi)容