一、隐式转换是什么
js中转换有两种
- 显式转换(由我们来决定转换方法和类型,所以对数据来讲我更喜欢称这个为被动转换)
- 隐式转换(由数据主动发生转换,而且并没有在代码上体现出来,可以成为主动转换)
二、面试题
let result = 1 + null + true + undefined + "TENCENT" + false + [] + undefined + null;
console.log(result);
console.log([] == false);
console.log(![] == false);
// NaNTENCENTfalseundefinednull
// true
// true
三、解析
在这边要提下js隐式转换原则:
1. 调用valueOf()方法,是原始值就返回,不是就继续下一步
2. 调用toString()方式,是原始值就返回,不是就继续下一步
3. 调用Number,是原始值就返回,不是就报类型错误
-
第一个打印还是比较简单,不做过多解释(null转为0,true转为1,2+undefined = NaN,字符串+除了Object有意外之喜,其它都会被转为字符串类型)
//注意 可能有人会说[ ] + 字符串也是,但是[ ] 在转换的时候也是被转成 “” -
第二个打印流程:
1.存在[], 转化为原始值
//valueOf取不到原始值
//toString转为""2.一个string, 另外为boolean,都转为number
Number(’’);//0
Number(false);//03.return 0 == 0;/true
-
第三个打印:
1.存在!和 = = 运算符 (!运算符优先级高)
//所以先![]
// 在《Javascript高级程序设计》这本书第44页中逻辑非的说明:如果操作术是一个对象是false 返回false2.false == false
返回true