Number()是js中内置的一种将其他类型转换为数值类型的方法。下面按照数据类型的划分来看一下转换的结果。基本类型String如果字符串包含无效数字字符,则结果为NaN。只有有效的数字字符才能转换为特定数字。如果为空字符串,则结果为0。代码如下:Number('123')//=>123Number('1.23')//=>1.23Number('123px')//=>NaNNumber('1.2.3')//=>NaNNumber('')//=>0Booleantrue转为1,false转为0。代码如下:Number(true)//=>1Number(false)//=>0null将结果转换为0。代码如下:Number(null)//=>0undefined转换结果为NaN。代码如下:Number(undefined)//=>NaNSymbol不能转换,会报错。代码如下:Number(Symbol(1))//=>TypeError:can'tconvertsymboltonumber引用类型的转换机制是:如果执行了Number(a),那么转换后的对象a首先调用toString()方法,得到结果b,然后执行Number(b)。具体操作如下:Object的toString()方法执行结果为“[objectObject]”,所以结果为NaN。代码如下:Number({a:1})//=>如果NaN数组对象为空数组,则结果为0。如果有多个元素,则结果为NaN。如果只有一个元素,则有多个结果。代码如下://空数组Number([])//=>0//多个元素Number(['1','2'])//=>NaNNumber([true,'2'])//=>NaN//一个元素//StringNumber(['1'])//=>1Number(['12.2'])//=>12.2Number(['12.2px'])//=>NaNNumber(['12.2.3'])//=>NaN//BooleanNumber([true])//=>NaNNumber([false])//=>NaN//nullNumber([null])//=>0//undefinedNumber([undefined])//=>0//SymbolNumber([Symbol(1)])//=>TypeError:can'tconvertsymboltonumber在转换日期对象时,将调用date对象获取毫秒数,然后转换为该毫秒数。代码如下:Number(newDate())//=>1657613985284Number(newDate('2011-03-05'))//=>1299283200000regularobjectregular对象调用toString()方法后,它将具有无效的A数字字符,因此转换结果为NaN。代码如下:Number(newRegExp())//=>NaNMath对象转换结果为对应的数。代码如下:Number(Math.floor(1.23))//=>1Function对象调用toString()方法后,会包含无效的数字字符,所以转换结果为NaN。代码如下:Number(function(){})//=>NaN
