JavaScript中 !! 运算符能做什么?

JS中的!!运算符,在做数据校验时,经常会用到,而且在面试的时候也经常会问道!!运算符,那么它到底是个什么东东呢,接下来将揭开我们将神秘的面纱。

在一些源码中你可能会看到类似这样的代码:

$.isArrayLike = function(obj) {
  var length = !!obj && "length" in obj && obj.length;
  var type = $.type(obj);
  if (type === "function" || $.isWindow(obj)) {
    return false;
  }
}

上面的代码中就用到了!!运算符,乍看有点懵,其实按照js内置 “!” 运算符从右到左按次序剖析,也就理解了。

先看内层运算: !obj,这是一个非运算:

obj为假时(null/undefined/false/NaN/””等),非运算后的结果未false;

obj为真时(非null/undefined/false/NaN/””等),非运算后的结果未true;

即:

!obj ===false ( obj为真时 )

!obj ===true ( obj为假时 )

再进行一次取非操作,结果就很明显了:

!!obj === true ( obj为真时 )

!!obj ===false ( obj为假时 )

所以,”!!”操作符是判断变量是否真正为真(非null/undefined/false/NaN/””等)的很简明的实现方式,省去了大量的&&运算,如果用&&来实现上述求真逻辑,代码表现如下:

if( obj !== null && obj !== undefined && obj !== NaN && obj !== "" && obj !== false){
   //statements
}

这样看起来就显得很臃肿。

总结

!!运算符在js中是求真的一个非常优秀的方法,!!运算符可以将右侧的值强制转换为布尔值,这也是将值转换为布尔值的一种简单方法。如下:

console.log(!!null); // false
console.log(!!undefined); // false
console.log(!!''); // false
console.log(!!0); // false
console.log(!!NaN); // false
console.log(!!' '); // true
console.log(!!{}); // true
console.log(!![]); // true
console.log(!!1); // true
console.log(!![].length); // false

所以在日常的实际项目开发中要用进去了。

1. 本站关注web前端开发,分享前端经验和技巧!
2. 喜欢本站的朋友可以收藏(Ctrl + D)本站!
3. 加入QQ群:565733884,我们大家一起来交流技术!
码云笔记 » JavaScript中 !! 运算符能做什么?

发表评论

提供最优质的资源集合

立即查看 了解详情