如何利用 Number() 转换 []、{} 与 null 的非直观结果分析

冬明君_2354

冬明君_2354

2026-05-06

101人浏览

原创

number([])为0、number({})为nan、number(null)为0:空数组经valueof失败后tostring得空字符串再转0;空对象tostring得"[object object]"含非数字字符故为nan;null是规范强制映射的特例,不走转换流程。

如何利用 number() 转换 []、{} 与 null 的非直观结果分析

Number() 对 []、{} 和 null 的转换结果看似矛盾,实则严格遵循隐式转换协议。关键不在“值像什么”,而在“怎么一步步算出来”。

空数组 [] → 0:toString() 先赢了

数组是对象,Number([]) 不会直接返回 NaN。它按规则先调用 [].valueOf() —— 返回原数组(仍是对象),不满足基本类型,于是继续调用 [].toString(),得到空字符串 ""。再对 "" 执行 Number 转换,规则明确:空字符串转为 0。

  • Number([]) 等价于 Number("".toString()) → Number("") → 0
  • 单元素数组如 [5] 或 ["42"] 同理:转成 "5" 或 "42",再转数字
  • 多元素数组如 [1,2] → "1,2" → 含逗号 → 非法数字字符 → NaN

空对象 {} → NaN:卡在 toString() 的死胡同里

{} 是普通对象,其 {}.valueOf() 默认返回自身(对象),接着调用 {}.toString(),返回 "[object Object]"。这个字符串含字母和方括号,完全不符合 Number 的字符串解析规则,所以结果是 NaN。

  • Number({}) ≡ Number("[object Object]") → 包含非数字字符 → NaN
  • 哪怕加个属性,比如 {a:1},toString 结果仍是 "[object Object]" → 还是 NaN
  • 自定义 toString() 可改变结果,例如:let obj = { toString(){return "123"} }; Number(obj) → 123

null → 0:这是硬编码的例外规则

null 是唯一一个既不是基本数字、也不是字符串或布尔值,却有确定数字映射的原始值。ECMAScript 明确规定:Number(null) 返回 0。这不是推导出来的,而是规范直给的特例。

  • 它不走 valueOf/toString 流程(null 没有这些方法)
  • 也不等同于“空”或“假值”的语义推断(否则 undefined 也该是 0,但它却是 NaN)
  • 设计初衷与表单空输入兼容有关:把未填写的数值字段视作 0 更便于计算

对比记忆要点

三者差异本质在于“触发路径不同”:

  • []:对象 → valueOf 失败 → toString 得 "" → 0
  • {}:对象 → valueOf 失败 → toString 得 "[object Object]" → NaN
  • null:原始值 → 绕过所有方法 → 规范强制映射 → 0

理解这三条路径,就不再觉得结果“反直觉”了。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.31

2911

5

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

2025.10.31

534

9

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

2026.02.12

502

19

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.02

6259

3

java中boolean的用法
java中boolean的用法

在Java中,boolean是一种基本数据类型,它只有两个可能的值:true和false。boolean类型经常用于条件测试,比如进行比较或者检查某个条件是否满足。想了解更多java中boolean的相关内容,可以阅读本专题下面的文章。

2023.11.13

2130

6

java boolean类型
java boolean类型

本专题整合了java中boolean类型相关教程,阅读专题下面的文章了解更多详细内容。

2025.11.30

143

8

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

2023.09.22

549

3

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

2024.03.01

1678

6

undefined是什么
undefined是什么

undefined是代表一个值或变量不存在或未定义的状态。它可以作为默认值来判断一个变量是否已经被赋值,也可以用于设置默认参数值。尽管在不同的编程语言中,undefined可能具有不同的含义和用法,但理解undefined的概念可以帮助我们更好地理解和编写程序。本专题为大家提供undefined相关的各种文章、以及下载和课程。

2023.07.31

11705

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.7万人学习