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

相关推荐
程序员编程指南10 分钟前
Qt 开发自动化测试框架搭建
c语言·开发语言·c++·qt
Wcowin18 分钟前
MkDocs文档日期插件【推荐】
前端·mkdocs
三小尛21 分钟前
C++赋值运算符重载
开发语言·c++
籍籍川草24 分钟前
JVM指针压缩的那些事
java·开发语言·jvm
小徐不徐说32 分钟前
C++ 模板与 STL 基础入门:从泛型编程到实战工具集
开发语言·数据结构·c++·qt·面试
艾莉丝努力练剑33 分钟前
【C/C++】类和对象(上):(一)类和结构体,命名规范——两大规范,新的作用域——类域
java·c语言·开发语言·c++·学习·算法
froginwe111 小时前
WebPages PHP:深入解析PHP在网页开发中的应用
开发语言
xw51 小时前
免费的个人网站托管-Cloudflare
服务器·前端
网安Ruler1 小时前
Web开发-PHP应用&Cookie脆弱&Session固定&Token唯一&身份验证&数据库通讯
前端·数据库·网络安全·php·渗透·红队
!win !1 小时前
免费的个人网站托管-Cloudflare
服务器·前端·开发工具