有时候一些JS真假判断的表达式是令人迷惑的,比如下面这种:
if (Infinity) ;
if(NaN) ;
if ("foo");
if ({});
!!""
如果对上面的表达式的结果感觉不确定,请继续。
首先需要弄清JS里面的真值和假值:
什么是真值?
在 JavaScript 中,truthy(真值)指的是在布尔值上下文中,转换后的值为真的值。所有值都是真值,除非它们被定义为 假值(即除false
、0
、-0
、0n
、""
、null
、undefined
和NaN
以外皆为真值)。
这句话有点拗口,其实就是说,除了上边所说的8种值是falsey,其余都是真值
什么是假值?
false
、0
、-0
、0n
、""
、null
、undefined
和NaN
这几种都是假值
到这里上面的一些式子就可以得到答问了:
if (Infinity) ;//true
if(NaN) ;//false
if ("foo");//true
if ({});//true
等一下:!!
是什么鬼?
我想一下啊,!
表示取反,!!
表示取反再取反,如果!!true
表示ture
的反义的反义,那不还是true
吗,这算是什么骚操作?
双重非(!!)运算符
双重非运算符:显式地将任意值强制转换为其对应的布尔值
其实就是Boolean
函数的另一个表达方式。那么下面这个式子就知道答案了:
!!"" //!!falsy 返回false
那这么做有什么意义呢?
下面看个例子
(error)=>{
if(!!error.response)
//这个表达式的意思是:response必须为真,
//即:response!=null&&typeof(response)!='undefined'&&response!=''...
//,与if(Boolean(error.response))同义
{
}
}
在这里要注意一点使用Boolean
函数:不要将原始布尔值true和false与布尔对象的true和false混淆。
,因为:
var x = new Boolean(false);
if (x) {
// 这段代码将会被执行
}
var myFalse = new Boolean(false); // myFalse 为false的布尔对象
var g = Boolean(myFalse); // g值为ture,因为myFalse不属于`假值`的任何一种
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。