你不知道的js中卷 --- 显式转换为布尔值

现在我们来看看从非布尔值强制类型转换为布尔值的情况。

与前面的

String(..)

Number(..)

一样,

Boolean(..)

(不带

new

)是显式的

ToBoolean

制类型转换:

var a = "0";

var b = [];

var c = {};

var d = "";

var e = 0;

var f = null;

var g;

Boolean( a ); // true

Boolean( b ); // true

Boolean( c ); // true

Boolean( d ); // false

Boolean( e ); // false

Boolean( f ); // false

Boolean( g ); // false

虽然

Boolean(..)

是显式的,但并不常用。

和前面讲过的

+

类似,一元运算符

!

显式地将值强制类型转换为布尔值。但是它同时还将

真值反转为假值(或者将假值反转为真值)。所以显式强制类型转换为布尔值最常用的方

法是

!!

,因为第二个

!

会将结果反转回原值:

var a = "0";

var b = [];

var c = {};

var d = "";

var e = 0;

var f = null;

var g;

!!a; // true

!!b; // true

!!c; // true

!!d; // false

!!e; // false

!!f; // false

!!g; // false

if(..)..

这样的布尔值上下文中,如果没有使用

Boolean(..)

!!

,就会自动隐式地进

ToBoolean

转换。建议使用

Boolean(..)

!!

来进行显式转换以便让代码更清晰易读。

显式

ToBoolean

的另外一个用处,是在

JSON

序列化过程中将值强制类型转换为

true

false

var a = [

1,

function(){ /*..*/ },

2,

function(){ /*..*/ }

];

JSON.stringify( a ); // "[1,null,2,null]"

JSON.stringify( a, function(key,val){

if (typeof val == "function") {

//

函数的

ToBoolean

强制类型转换

return !!val;

}

else {

return val;

}

} );

// "[1,true,2,true]"

下面的语法对于熟悉

Java

的人并不陌生:

var a = 42;

var b = a ? true : false;

三元运算符

? :

判断

a

是否为真,如果是则将变量

b

赋值为

true

,否则赋值为

false

表面上这是一个显式的

ToBoolean

强制类型转换,因为返回结果是

true

或者

false

然而这里涉及隐式强制类型转换,因为

a

要首先被强制类型转换为布尔值才能进行条件判

断。这种情况称为“显式的隐式”,有百害而无一益,我们应彻底杜绝。

建议使用

Boolean(a)

!!a

来进行显式强制类型转换

发布了235 篇原创文章 · 获赞 88 · 访问量 44万+

猜你喜欢

转载自blog.csdn.net/qq_34629352/article/details/105319383