引题:
请问以下表达式的值是多少?
null == undefined
0 == false
1 == true
0 == undefined
1 == undefined
0 == null
1 == null
以下x
为左侧表达式的值 ,y
为右侧表达式的值,z
表示表达式判断的的另一侧,例如:
‘1’ == true
x === ‘1’
y === true
typeof x === ‘string’ 则 z = y,typeof y === 'boolean’则 z = x
其内部实现步骤:
- 判断
x
或y
是否是正常的值,如果不是则中断执行报错 - 运行 === 执行严格相等运算
x
===y
,相同则返回真,假则向下执行 - 判断
x
===undefined且y
===null,或者x
===null且y
===undefined,如果符合条件则返回真,否则向下执行 - 判断 typeof x | y === number,且typeof
z
=== (string | number) ,则number(z
)重新调用==相等运算符,并返回其结果 - 判断 typeof x | y === string,且typeof
z
=== (string | number) ,则number(z
)重新调用==相等运算符,并返回其结果 - 如果typeof x | y === boolean,则number(
z
)重新调用==相等运算符,并返回其结果 - 如果typeof x | y === string | symbol | number,typeof
z
=== object,则返回x | y
== toPrimitive(z
)的结果 - 返回false
总结
优先执行对象,调用ToPrimitive()
其次执行数字,调用Number()
碰到布尔,调用number
碰到字符串或symbol,调用toString()
这里引题的答案就不说了,大家可以根据以上的规律来分析一下