关于类型转化,判断以下代码输出
更多描述
Boolean(new Boolean(false));
Boolean(document.all);
[] == "";
[3] == 3;
[] == false;
42 == true;
Issue 欢迎在 Gtihub Issue 中回答此问题: Issue 586 (opens in a new tab)
Author 回答者: mrrs878 (opens in a new tab)
在==
时,会强制类型转换并比较转换后的结果
比较过程如下:
- 如果两个变量都是对象,则当都引用同一对象时才返回
true
null == undefined
? 返回true
- 当两个变量类型不一致时会进行类型转换:
string == number
?string
转换为number
后再进行比较boolean == any
?boolean
转换为number
后再进行比较object == string/number/symbol
? 尝试调用object
的valueOf
或toString
将其转换为原始类型后再进行比较
- 当两个变量类型一致时:
number == number
? 其中有一个为NaN
时返回false
;+0 == -0
时返回true
所以[] == 0
时:
[]
先调用Array.prototype.toString
转为原始值
Array.prototype.toString.call([]);
// ""
-
"" == 0
,""
转为number
即0 -
0 == 0
,返回true
其他几行代码同理
Author 回答者: wuzqZZZ (opens in a new tab)
[] == "";
// 1. [].toString() => ""
// 2. "" == ""
// 3. Number("") => 0
// 4. 0 == 0 => true
[3] == 3;
// 1. [3].toString() => "3"
// 2. "3" == 3
// 3. Number("3") => 3
// 4. 3 == 3 => true
[] == false;
// 1. [].toString() => ""
// 2. "" == false
// 3. Number("") => 0 Number(false) => 0
// 4. 0 == 0 => true
42 == true;
// 1. Number(true) => 1
// 2. 42 == 1 => false