昨天修改代码时候,要给一个对象加上一个新的属性,用来判断ng-class里类名的添加和取消。
新的属性名字并没有提前声明,直接在方法中写上obj.selected = !obj.selected,直接读取这个属性结果会是undefined,
但是在这里执行了取反的操作后就直接变成boolean类型的数据了,突然觉得js好方便

然后好奇又进行了下面的尝试
img
取反把undefined类型转成了boolean类型

JS中的Boolean数据类型转换

! 一个叹号是取反,会首先将值转化为布尔类型 然后再取反

1
console.log(!2);    //false

数据类型转换的规则:
1)如果只有一个值,判断这个值是真还是假,遵循只有 0 NaN “” null undefined 这5个是假的其余的都是真的

1
2
3
console.log(!!"KeyonY");  //true, !! 将其他的数据类型转换为boolean类型, 相当于 Boolean("KeyonY") 

![] //false ,[] 为true(除了0 NaN "" null undefined 都为true) 所以 ![]为false

var1 == var2 两个值可能不是用一个数据类型的,如果是==比较的话,会进行默认的数据类型转换
2)对象== 对象 永远不相等
3)对象== 字符串 先将对象转换为字符串,然后再进行比较

1
2
3
[]==""   //true ,[]转化为字符串   
//[].toString()转化为字符串 ""
//{}转化为字符串 "[object object]"

4)对象==布尔类型 对象先转换为字符串(toString),然后在转化为数字(Number),布尔类型也转换为数字(true是1,false是0),最后让两个数字比较

1
[]==false  //true

5)对象==数字 对象先转化为字符串(toString),然后把字符串在转化为数字(Number)

1
[]==1   //false

6)数字==布尔 布尔转化为数字
7)数字==字符串 字符串转化为数字
8)字符串==布尔 都转化为数字
9) null == undefined 结果是true
10) null或者undefined 和其他任何的数据类型比较都不相等
==是比较 ===也是比较 (绝对比较)