奇技淫巧之判断入参是否为undefined

    xiaoxiao2022-07-13  151

    奇技淫巧之判断入参是否为undefined

    前言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 进行判断

    ,从而解决大家实际中遇到的问题。如果小主们觉得这篇分享还比较有用的话请不要吝啬点个—赞

    最新回复(0)