面试题答案
一键面试比较运算中的隐式数据类型转换
- 字符串与数字比较
- 示例:
'5' == 5
,此表达式返回true
。 - 原理:当一个字符串与一个数字进行
==
比较时,JavaScript 会尝试将字符串转换为数字。这里,字符串'5'
被转换为数字5
,然后再进行比较,所以结果为true
。但如果是'a' == 5
,由于'a'
无法被转换为有效的数字(转换结果为NaN
),所以此表达式返回false
。
- 示例:
- 布尔值与其他类型比较
- 示例:
true == 1
返回true
,false == 0
返回true
。 - 原理:当布尔值与数字比较时,
true
会被转换为1
,false
会被转换为0
,然后再进行比较。例如true == 1
,true
先转换为1
,再与1
比较,结果为true
。
- 示例:
- 对象与原始类型比较
- 示例:
({}) == '[object Object]'
返回true
。 - 原理:当对象与字符串比较时,对象会先调用
toString()
方法将自身转换为字符串。对于普通对象,toString()
方法默认返回[object Object]
,所以({}) == '[object Object]'
为true
。如果对象有自定义的toString()
方法,则会调用自定义的方法进行转换。
- 示例:
算术运算中的隐式数据类型转换
- 字符串与数字相加
- 示例:
'5' + 3
返回'53'
。 - 原理:在加法运算中,如果其中一个操作数是字符串,JavaScript 会将另一个操作数也转换为字符串,然后进行字符串拼接。这里数字
3
被转换为字符串'3'
,然后与'5'
拼接成'53'
。
- 示例:
- 非数字与数字运算
- 示例:
'a' * 2
返回NaN
。 - 原理:当进行乘法、除法、减法等算术运算时,如果其中一个操作数不是数字,JavaScript 会尝试将其转换为数字。这里
'a'
无法被转换为有效的数字,所以转换结果为NaN
,任何与NaN
进行的算术运算结果都为NaN
。
- 示例: