console.log(([])?true:false); console.log(([]==false?true:false)); console.log(({}==false)?true:false)
第一题 Boolean([]) //true
布尔类型里只有这几参数个返回false,其它都为true Boolean(undefined) // false Boolean(null) // false Boolean(0) // false Boolean(NaN) // false Boolean('') // false
第二题,和第三题
考察点:条件(三元)运算符运算规则、Boolean()转换规则、比较运算符==转换规则、对象与原始值之间的转换
一、相关规则
1、条件运算符运算规则:条件判断时使用Boolean的隐式转换,即调用Boolean();
2、Boolean()转换规则:直观上为“空”的值(如0、空字符串''、null、undefined和NaN)将变为false,其他值变成true。
3、比较运算符==的转换规则:当对不同类型的值进行比较时,JavaScript 会首先将其转化为数字(number)再判定大小。
4、对象与原始值之间的转换算法:如果存在则调用obj[Symbol.toPrimitive](hint),否则尝试obj.valueOf()和obj.toString()
二、代码解析
1、①[]属于对象,Boolean(对象)为true。②true?true:false,结果为true
2、①[]==false, 即Number([])==Number(false)。②左边为([]).toString()='', Number('')=0,最终比较的是0==0,即为true。③Boolean(true)为true。④true?true:false,结果为true
3、①{}==false,即Number({})==Number(0),。②左边为({}).toString()='[object Object]', Number('[object Object]')=NaN,最终比较的是NaN==0,即为false。③Boolean(false)为false。④false?true:false,结果为false
此题考察类型转换,三元运算符先“分清是非”,再决定今后该走哪条路,“==”运算符比较“喜欢”Number类型。(我就不严谨地这么一说,若要刨根问底,请看《JavaScript权威指南》)
“==”运算符(两个操作数的类型不相同时)
对象到数字的转换
空数组转换为数字0
(1)console.log(([])?true:false); //true Boolean([]) = true;
console.log(({})?true:false);//true Boolean({}) = true;
条件操作符(三元运算符),条件判断时使用Boolean的隐式转换,即调用Boolean();
Boolean()转换规则
数据类型 | 转换为true的值 | 转换为false的值 |
Boolean | true | false |
String | 任何非空字符串 | “” (空字符串) |
Number | 任何非零数字(包括无穷大) | 0和NaN |
Object | 任何对象 | null |
Undefined | 不适用 | undefined |
(2)console.log(([]==false?true:false)); //true [].toString() = “”;Number(“”) = 0;
console.log(({}==false)?true:false);//false {}.toString() = “[object Object]” ; Number(“[object Object]”) = NaN;
==转换不同数据类型遵循的规则
**如果是Boolean,true转换为1,false转化为0;
**如果是String,转换为数值(使用Number());
**如果是Object,先调用valueOf(),再调用toString();
**undefined == null;
**NaN与任何数不等;
console.log(([])?true:false); console.log(([]==false?true:false)); console.log(({}==false)?true:false)
逻辑语句中隐私类型转换,使用 == 比较中的5条规则:
优先级依次降低
答案选C:“true、true、false”。此题考察类型转换,三元运算符先“分清是非”,再决定今后该走哪条路,“==”运算符比较“喜欢”Number类型。(我就不严谨地这么一说,若要刨根问底,请看《JavaScript权威指南》)
下面是题目的类型转换结果:
因此:
《JavaScript权威指南》的部分相关知识点
“==”运算符(两个操作数的类型不相同时)
对象到数字的转换
空数组转换为数字0