对undefined的精准判断

更新日期: 2019-05-23阅读: 2.5k标签: undefined

作为一个程序员,coding是每天必做的事情之一,今天埃尔斯在阅读腾讯AlloyTeam 的一个开源项目AlloyTouch,发现了一个有意思的小技巧,就是对undefined的精准判断。源码地址:https://github.com/AlloyTeam/AlloyTouch/blob/master/alloy_touch.js这里面有个_getValue方法。


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** // 程序返回

上面程序在Chrome里的console里面打印结果如下图所示:



总结

经过小伙伴上面的实验发现了一个有趣的事情。使用 !运算符,他会将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 进行判断  


原文来自:https://my.oschina.net/u/2542841/blog/3053300  

链接: https://fly63.com/article/detial/3404

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!