为什么 ('b' 'a' 'a' 'a').toLowerCase() 'banana' 的结果?

新手上路,请多包涵

当我的一位朋友遇到这段 JavaScript 代码时,我正在练习一些 JavaScript:

 document.write(('b' + 'a' + + 'a' + 'a').toLowerCase());

上面的代码回答 "banana" !谁能解释为什么?

原文由 HV Sharma 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 466
2 个回答

+'a' 解析为 NaN (“不是数字”)因为它将字符串强制转换为数字,而字符 a 不能解析为-

 document.write(+'a');

小写它变成 banana

Adding NaN to "ba" turns NaN into the string "NaN" due to type conversion, gives baNaN .然后后面有一个 a ,给出 baNaNa

+ + 之间的空格是为了使第一个字符串连接和第二个一元加(即“正”)运算符。如果您使用 'ba'+(+'a')+'a' ,您会得到相同的结果,解析为 'ba'+NaN+'a' ,这等同于 'ba'+'NaN'+'a' type-ling- 由于。

 document.write('ba'+(+'a')+'a');

原文由 SOFe 发布,翻译遵循 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题