論js中的null和undefined

??? 最近看review同事的代碼上煤,發(fā)現他定義一個變量但不賦值時,經常將這個其設為null(let a = null;)奇瘦,而非我經常只定義不賦值時的undefined(let a;),所以下意識的就得自己一定是忽略了什么,于是花了點點時間來了解了下二者的卻別演痒,帶著下面的問題為,我們來開始我們的剖析趋惨。

定義變量但"不賦值"的話鸟顺,到底需不需要將其設為null?

一器虾、相似性

? ? 老實說在js中將一個變量設為null或undefined幾乎沒什么區(qū)別讯嫂,幾乎是等價的。在if語句中二者都會被轉化成false,做相等運算時兆沙,二者還相等欧芽。?

? ? if (null) { console.log('null is false') }? ? =====>? ? 輸出'null is false'

? ? if (undefined) { console.log('null is false') }? ? =====>? ? 輸出'undefined is false'

? ? undefined? == null? ??=====>? ? 輸出true

二、既然二者如此相似葛圃,為什么js還要設置這樣的兩個值千扔?

? ? 原來JavaScript誕生之初,最初像Java一樣库正,只設置了null作為表示"無"的值曲楚。
? ? ① null像在Java里一樣,被當成一個對象褥符。但是洞渤,JavaScript的數據類型分成基本類型和引用類型兩大類,Brendan Eich覺得表示"無"的值最好不是對象属瓣。
? ? ②?JavaScript的最初版本沒有包括錯誤處理機制载迄,發(fā)生數據類型不匹配時,往往是自動轉換類型或者默默地失敗抡蛙。Brendan Eich覺得护昧,如果null自動轉為0(Number(null)? =====>? 輸出0),很不容易發(fā)現錯誤粗截,所以Brendan Eich又設計了一個undefined(Number(undefined)? =====>? 輸出NaN)惋耙。

三、二者目前的用法

? ? null表示"沒有對象",即該處不應該有值绽榛。典型用法:
? ? ① 作為函數的參數湿酸,表示該函數的參數不是對象;
? ? ② 大家都知道js對象的老祖宗Object.prototype灭美,但是大家有沒想過Object.prototype.__proto__是什么值推溃,其實是null,而非undefined届腐;

? ? undefined表示"缺少值"铁坎,就是此處應該有一個值,但是還沒有定義犁苏。典型用法:
? ? ① 變量被聲明了硬萍,但沒有賦值時,就等于undefined围详;
? ? ②?調用函數時朴乖,應該提供的參數沒有提供,該參數等于undefined助赞;
? ? ③?對象沒有賦值的屬性寒砖,該屬性的值為undefined;
? ? ④?函數沒有返回值時嫉拐,默認返回undefined哩都;

? ? 綜上幾點看來,個人覺得聲明的變量未賦值時還是按其默認的undefined為好(若確定這個變量后面會被賦值成一個對象婉徘,設null也可)漠嵌,強行解釋,原由如下:
? ? ① 減少代碼量盖呼;
? ? ② 通常值設為null表示其值后面會設為一個對象儒鹿,但是js作為一個弱類型的語言,變量有時基本類型引用類型都有可能被賦值上几晤;
? ?③ null在做計算操作時會被轉換成0參與計算约炎,當定義的變量沒被賦上值,且參與了計算蟹瘾,頁面不會報錯圾浅,出現了bug不易發(fā)現。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末憾朴,一起剝皮案震驚了整個濱河市狸捕,隨后出現的幾起案子,更是在濱河造成了極大的恐慌众雷,老刑警劉巖灸拍,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件做祝,死亡現場離奇詭異,居然都是意外死亡鸡岗,警方通過查閱死者的電腦和手機混槐,發(fā)現死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來轩性,“玉大人声登,你說我怎么就攤上這事∨谝蹋” “怎么了捌刮?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵碰煌,是天一觀的道長舒岸。 經常有香客問我,道長芦圾,這世上最難降的妖魔是什么蛾派? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮个少,結果婚禮上洪乍,老公的妹妹穿的比我還像新娘。我一直安慰自己夜焦,他們只是感情好壳澳,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著茫经,像睡著了一般巷波。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卸伞,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天抹镊,我揣著相機與錄音,去河邊找鬼荤傲。 笑死垮耳,一個胖子當著我的面吹牛,可吹牛的內容都是我干的遂黍。 我是一名探鬼主播终佛,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼雾家!你這毒婦竟也來了查蓉?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤榜贴,失蹤者是張志新(化名)和其女友劉穎豌研,沒想到半個月后妹田,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡鹃共,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年鬼佣,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霜浴。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡晶衷,死狀恐怖,靈堂內的尸體忽然破棺而出阴孟,到底是詐尸還是另有隱情晌纫,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布永丝,位于F島的核電站锹漱,受9級特大地震影響,放射性物質發(fā)生泄漏慕嚷。R本人自食惡果不足惜哥牍,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望喝检。 院中可真熱鬧嗅辣,春花似錦、人聲如沸挠说。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽损俭。三九已至蛙奖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間撩炊,已是汗流浹背外永。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拧咳,地道東北人伯顶。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像骆膝,于是被迫代替她去往敵國和親祭衩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內容