作为一个程序员,coding是每天必做的事情之一,今天埃尔斯在阅读腾讯AlloyTeam 的一个开源项目AlloyTouch,发现了一个有意思的小技巧,就是对undefined的精准判断。源码地址:https://github.com/AlloyTeam/AlloyTouch/blob/master/alloy_touch.js这里面有个_getValue方法。
_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,并前要使程序能取到false,0,null等值时可以使用 void 0 进行判断
原文来自:https://my.oschina.net/u/2542841/blog/3053300
当你开心地在编程,惊叹于vue的神奇,这时你却遇到这样的情况:你的vue应用无法正常工作,你收到的报错是:this is undefined,产生问题的原因是你混合使用了普通函数和箭头函数。
在 JavaScript 中,假设我们想判断一个是否是 undefined,那么我们通常会这样写:if(a === undefined){//code},但是,JavaScript 中的 undefined 并不可靠,我们试着写这样一个函数:
void 运算符通常只能用于获取 undefined 的原始值,一般用void(0),等同于void 0,也可以使用全局变量 undefined 替代。那什么是void 0、void 0 有什么意义、与undefined有什么关系呢?我们一起来总结一下。
大家都知道void运算符总会返回一个undefined的结果,那么为什么要用void 0来代替undefined呢?这不是多此一举了吗?下面为大家讲讲这样使用的原因。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!