奇技淫巧之判断入参是否为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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值