【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中!和!!用法

相关推荐
葡萄城技术团队1 小时前
1000 人协同压测的环境瓶颈排查:CPU 争用与 Wi\-Fi
前端
第九序言T2 小时前
Python 数据处理进阶(十八)批量处理同结构文件:一个文件夹一次跑完
开发语言·python·自动化·pandas·数据处理
excel2 小时前
Marked 与 Markdown 有什么区别?该怎么选?
前端
龙亘川3 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
程序喵大人3 小时前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型
Da Da 泓3 小时前
五子棋 Web 端测试用例报告
前端·网络·websocket·网络协议·测试用例·项目
Raas1004 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
zxcvb1534 小时前
远程查看本地文档:一条轻量 Web 文件服务的工程化链路
前端·远程查看文档
niucloud-admin4 小时前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php
程序员大阳4 小时前
副队长JavaScript教程(50)-DOM:网页开发的起点
javascript·dom·es·节点·概念·document·关系