使用时有时会在变量前面加上兩个感叹号,这样做表示什么含义呢中,!表示运算符“非”如果变量不是布尔类型,会将变量自动转化为布尔类型再取非,那么用兩个!!就可以将变量转化为对应布尔值
Javascript中哪些情况下!!值为真?当变量转化为布尔值true时为真咯!
Javascript中各种类型如何转换为布尔值
我们至少可以想到undifined和null一定是转化为false的,数字0也一定是false那么,空字符串空数组,空对象呢别急,下面的实验会有清晰的答案
首先,定义三个转化布尔值的函数我们后面会看到这三个函数是等价的,并且同时输出三个函数的转化结果
依次undefined,null,空字符串,负0正0,不确定数值布尔值false,布尔值true,字符串0数字1,数字无穷大字符串true,字符串false,空数组,空对象函数
可以看到前面7個值都是false,后面9个值都是true。比较值得一提的结论如下:
任意数组对象,函数(函数是特殊的对象)都转化为真即使是空数组,空对象
涳字符串为false,非空字符串为true
数值正负0,不确定值为false其它为true,无穷大也是true。
字符串”0″和数值0可以相互转换但它们转换为不同的布尔值,即0可转换为”0″”0″可转换为true,但0却转换为false,可见Javascript中类型转换不具有传递性。
一个更有趣的现象是布尔值false会转化为字符串”false”而字符串”false”却转换为布尔值true。
回到我们的题目Javascript中!!(两个感叹号,双感叹号)可以用来做什么可以用来判断一些变量的值啊!如果值为真,首先可鉯排除undefined和null,根据对象类型可以做出如下判断:
数值:表示不是0,且有确定含义的值(包括无穷大)
字符串:表示长度大于0的字符串
数组對象,函数:只能表示不是undefined或null,并不能判断是否有元素和内容
另外,我们上面比较了三个函数结果是一样的,所以下面两个用法其实是唍全等价的:
如果作为条件表达式不需要使用!!进行转换,Javascript会自动转换!!就只应用于将类型转换为布尔值。