为何Number("1"+null)是NaN?

为何Number("1"+null)是NaN?
我理解的应该是10
因为Number(null)是0

阅读 1.7k
2 个回答

Number是一个函数调用,首先会将
"1" + null 的结果传递给 Number 这个内置的函数中
"1" + null的结果是字符串 1null
这个字符串转换为 number 类型只能是 NaN not a number

因为首先执行的"1" + null是字符串拼接,字符串拼接的时候其他的类型的值会先转化成字符串。

这跟加法操作符的特性相关

如果有操作符是字符串,则应遵循如下规则

  1. 如果两个都是,第二个拼到第一个后面
  2. 如果只有一个是,另一个转化为字符串,再执行1

一般通过toString()转化(可以自己设置有优先级更高的Symbol.toPrimitive),如果是null或者undefined使用String()

String的转化规则如下

  1. 如果值有toString()方法,则调用该方法并返回结果
  2. 如果值是null,返回"null"
  3. 如果值是undefined,返回"undefined"

你想要实现=10则应该 Number("1"+(null + 0))null先转下数字,而不是直接转字符串

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