我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

本文说一下JavaScript里面的!!操作,也可以称之为“非非”操作。这个操作表示什么意思呢?在实际的编程之中,它的作用是把变量变成布尔型,可以用于判断非空/非false,或者说“变量是否真实存在”。

苏南大叔:JavaScript,如何理解双感叹号!!操作?变量类型变布尔 - 双感叹号操作
JavaScript,如何理解双感叹号!!操作?变量类型变布尔(图2-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。本文测试环境:nodejs@20.18.0chrome@132.0.6834.84。本文讲述单感叹号/双感叹号操作。

null 和 undefined

首先处理Nullundefined。这两个就是负面变量的代言人。

var s = null; 
console.log(s);     // null
console.log(!s);    // true
console.log(!!s);   // false

var s;
console.log(s);     // null
console.log(!s);    // true
console.log(!!s);   // false

var s = undefined;
console.log(s);     // undefined
console.log(!s);    // true
console.log(!!s);   // false

代码运行的结论就是:在某种意义上来说,nullundefined就相当于false

空字符串与非空字符串

var s = ""; 
console.log(s);     //
console.log(!s);    // true
console.log(!!s);   // false

令人意外的是,空字符串的表现,和null一致。从某种意义上来说,空字符串就是null,就是false。而非空字符串(包括空格)的结论,完全相反。

var s = " "; 
console.log(s);     //
console.log(!s);    // false
console.log(!!s);   // true

苏南大叔:JavaScript,如何理解双感叹号!!操作?变量类型变布尔 - 空字符串相当于false
JavaScript,如何理解双感叹号!!操作?变量类型变布尔(图2-2)

空数组、空对象

空数组、空对象和空字符串的结论,完全相反。它们并不被认为是一种null或者false

var s = [];
console.log(s);     // []
console.log(!s);    // false
console.log(!!s);   // true

var s = {};
console.log(s);     // {}
console.log(!s);    // false
console.log(!!s);   // true

数字0、1

数字0,会被认为是false的代言词。这个结论是深入人心的。并不需要进行讨论。

var s = 0;
console.log(s);     // []
console.log(!s);    // true
console.log(!!s);   // false

var s = 1;
console.log(s);     // {}
console.log(!s);    // false
console.log(!!s);   // true

var s = 2;
console.log(s);     // {}
console.log(!s);    // false
console.log(!!s);   // true

结语

更多苏南大叔的JavaScript文章,请参考苏南大叔的博客文章:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   js