【JS】! !! !!!区别

文章目录

概述

!是逻辑与运算,并且可以与任何变量进行逻辑与将其转化为布尔值,"!!"则是逻辑与运算的取反运算,尤其后者在判断类型时代码简洁高效,省去了多次判断null、undefined和空字符串的冗余代码。

!!常常用来做类型判断,在第一步!(变量)之后再做逻辑取反运算,在js中新手常常会写这样臃肿的代码:

判断变量a为非空,未定义或者非空串才能执行方法体的内容

具体

测试代码

javascript 复制代码
    testObjISTrueOrFalse: function(obj) {
      this.trueOrFalse(obj)
      this.trueOrFalseOfOne(obj)
      this.trueOrFalseOfTwo(obj)
      this.trueOrFalseOfThree(obj)
    },
    trueOrFalse: function(obj) {
      if (obj) {
        console.log(obj + '_trueOrFalse', 'true')
      } else {
        console.log(obj + '_trueOrFalse', 'false')
      }
    },
    trueOrFalseOfOne: function(obj) {
      console.log(obj + '_trueOrFalseOfOne', !obj)
    },
    trueOrFalseOfTwo: function(obj) {
      console.log(obj + '_trueOrFalseOfTwo', !!obj)
    },
    trueOrFalseOfThree: function(obj) {
      console.log(obj + '_trueOrFalseOfThree', !!!obj)
    }

依次测试 undefined,null,空字符串,负0,正0,不确定数值,布尔值false,布尔值true,字符串0,数字1,数字无穷大,字符串true,字符串false,空数组,空对象,函数

javascript 复制代码
var arr = [undefined, null, '', -0, 0, NaN, false, true, '0', 1,
Infinity, 'true','false', [], {}, function() {}]
for (var i = 0; i < arr.length; i++) {
    this.testObjISTrueOrFalse(arr[i])
}

测试结果如下:

javascript 复制代码
undefined_trueOrFalse false
undefined_trueOrFalseOfOne true
undefined_trueOrFalseOfTwo false
undefined_trueOrFalseOfThree true
null_trueOrFalse false
null_trueOrFalseOfOne true
null_trueOrFalseOfTwo false
null_trueOrFalseOfThree true
_trueOrFalse false
_trueOrFalseOfOne true
_trueOrFalseOfTwo false
_trueOrFalseOfThree true
0_trueOrFalse false
0_trueOrFalseOfOne true
0_trueOrFalseOfTwo false
0_trueOrFalseOfThree true
0_trueOrFalse false
0_trueOrFalseOfOne true
0_trueOrFalseOfTwo false
0_trueOrFalseOfThree true
NaN_trueOrFalse false
NaN_trueOrFalseOfOne true
NaN_trueOrFalseOfTwo false
NaN_trueOrFalseOfThree true
false_trueOrFalse false
false_trueOrFalseOfOne true
false_trueOrFalseOfTwo false
false_trueOrFalseOfThree true
true_trueOrFalse true
true_trueOrFalseOfOne false
true_trueOrFalseOfTwo true
true_trueOrFalseOfThree false
0_trueOrFalse true
0_trueOrFalseOfOne false
0_trueOrFalseOfTwo true
0_trueOrFalseOfThree false
1_trueOrFalse true
1_trueOrFalseOfOne false
1_trueOrFalseOfTwo true
1_trueOrFalseOfThree false
Infinity_trueOrFalse true
Infinity_trueOrFalseOfOne false
Infinity_trueOrFalseOfTwo true
Infinity_trueOrFalseOfThree false
true_trueOrFalse true
true_trueOrFalseOfOne false
true_trueOrFalseOfTwo true
true_trueOrFalseOfThree false
false_trueOrFalse true
false_trueOrFalseOfOne false
false_trueOrFalseOfTwo true
false_trueOrFalseOfThree false
_trueOrFalse true
_trueOrFalseOfOne false
_trueOrFalseOfTwo true
_trueOrFalseOfThree false
[object Object]_trueOrFalse true
[object Object]_trueOrFalseOfOne false
[object Object]_trueOrFalseOfTwo true
[object Object]_trueOrFalseOfThree false
function () {}_trueOrFalse true
function () {}_trueOrFalseOfOne false
function () {}_trueOrFalseOfTwo true
function () {}_trueOrFalseOfThree false

来源

JavaScript中 !,!!,!!!(一个,两个,三个感叹号)的含义
js中!和!!用法

相关推荐
EatFan2 分钟前
React 项目踩坑实录:useEffect 闭包陷阱、Context 性能陷阱与 React 18 升级避坑排查手册
前端·javascript·react.js·react·react hooks·useeffect·闭包陷阱
SunnyDays101116 分钟前
Java 合并 PDF 文件:完整合并、指定页面合并与流合并
java·开发语言·合并pdf
风骏时光牛马35 分钟前
企业业务运营信息数据库
前端
kimnoic1 小时前
Python操作xlwings的实例详解
开发语言·python
IT_陈寒1 小时前
Vue的数组更新把我坑惨了
前端·人工智能·后端
栗子~~1 小时前
java - logstash-logback-encoder 集成 demo
java·开发语言·logback
于航1 小时前
分层上下文压缩,幻觉检测,错误累积概要
前端
数据掘金1 小时前
鸿蒙统计的权限弹窗怎么适配?
前端
数据掘金1 小时前
鸿蒙统计的多设备协同数据怎么打通?
前端
尘中远1 小时前
Qwt7的曲线渲染平滑实现:高斯卷积、Savitzky-Golay 回归与特征保护
前端