奇技淫巧之判斷入參是否爲undefined

前言
做爲一個程序員,coding是天天必作的事情之一,今天埃爾斯在閱讀騰訊AlloyTeam 的一個開源項目AlloyTouch,發現了一個有意思的小技巧,就是對undefined的精準判斷。源碼地址:https://github.com/AlloyTeam/AlloyTouch/blob/master/alloy_touch.js 這裏面有個_getValue方法。git

undefined的判斷
在源碼裏的方法是這樣的:
_getValue: function (obj, defaultValue) {
return obj === void 0 ? defaultValue : obj;
},
這裏的意思是當obj爲undefined的時候,return取defaultValue.
當看到這裏的時候我就有點納悶騰訊大神爲何不適用 「!」
爲何不寫成這樣的
_getValue: function (obj, defaultValue) {
return !obj ? defaultValue : obj;
},
按理說這樣也能實現對undefined的判斷,我本身試了試確實能夠,我嘗試的代碼以下所示:程序員

function aa(obj, defaultValue) {
     return obj === void 0 ? defaultValue : obj;
};  aa(0,2)
**0** // 程序返回
 function aa(obj, defaultValue) {
     return obj === void 0 ? defaultValue : obj;
};  aa(null,2)
**null**// 程序返回
function aa(obj, defaultValue) {
     return obj === void 0 ? defaultValue : obj;
};  aa(undefined,2)
function aa(obj, defaultValue) {
    return obj === void 0 ? defaultValue : obj;
};  aa(bb,2)
**VM504:3 Uncaught ReferenceError: bb is not defined
    at <anonymous>:3:8**// 程序返回  報錯
(anonymous) @ VM504:3

function aa(obj, defaultValue) {
     return obj === void 0 ? defaultValue : obj;
};  
var bb ={};
aa(bb,2)
**{}**  // 程序返回
function aa(obj, defaultValue) {
     return obj === void 0 ? defaultValue : obj;
};  
var bb ={};
aa(bb.c,2)
**2** // 程序返回github


上面程序在Chrome裏的console裏面打印結果以下圖所示:spa

總結
通過小夥伴上面的實驗發現了一個有趣的事情。使用 !運算符,他會將undefined,null, 0,false, 變爲true,即(obj爲undefined,null, 0,false時, !obj === true), 可是當使用void 0 時,他只會全等於undefined。
注意(bb={}時,bb.c是undefined),因此小夥伴們對象

在須要判斷某對象的屬性爲undefined,並前要使程序能取到false,0,null等值時能夠使用 void 0 進行判斷blog

,從而解決你們實際中遇到的問題。若是小主們以爲這篇分享還比較有用的話請不要吝嗇點個—
 get

相關文章
相關標籤/搜索