当我的一位朋友遇到这段 JavaScript 代码时,我正在练习一些 JavaScript:
document.write(('b' + 'a' + + 'a' + 'a').toLowerCase());
上面的代码回答 "banana"
!谁能解释为什么?
原文由 HV Sharma 发布,翻译遵循 CC BY-SA 4.0 许可协议
当我的一位朋友遇到这段 JavaScript 代码时,我正在练习一些 JavaScript:
document.write(('b' + 'a' + + 'a' + 'a').toLowerCase());
上面的代码回答 "banana"
!谁能解释为什么?
原文由 HV Sharma 发布,翻译遵循 CC BY-SA 4.0 许可协议
'b' + 'a' + + 'a' + 'a'
…被评估为…
'b' + 'a' + (+'a') + 'a'
(参见: 运算符优先级)
(+'a')
尝试使用 一元加运算符 将 'a'
转换为数字。因为 'a'
不是数字,所以结果是 NaN
( “不是数字” ):
'b' + 'a' + NaN + 'a'
虽然 NaN
代表“Not a Number”,但它仍然是一个数字 _类型_;当添加到字符串时,它会像任何其他数字一样连接:
'b' + 'a' + NaN + 'a' => 'baNaNa'
最后,它是小写的:
'baNaNa'.toLowerCase() => 'banana'
原文由 Tyler Roper 发布,翻译遵循 CC BY-SA 4.0 许可协议
13 回答13k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
6 回答1.1k 阅读
+'a'
解析为NaN
(“不是数字”)因为它将字符串强制转换为数字,而字符a
不能解析为-小写它变成
banana
。Adding
NaN
to"ba"
turnsNaN
into the string"NaN"
due to type conversion, givesbaNaN
.然后后面有一个a
,给出baNaNa
。+ +
之间的空格是为了使第一个字符串连接和第二个一元加(即“正”)运算符。如果您使用'ba'+(+'a')+'a'
,您会得到相同的结果,解析为'ba'+NaN+'a'
,这等同于'ba'+'NaN'+'a'
type-ling- 由于。