摘要:在项目开发中我们经常会用到转型方法,尤其是这种松散型的语言。其中比较常用的方法就是方法和方法了,下面我们分别对这几种方法的转型机制进行详细地说明。
在项目开发中我们经常会用到转型方法,尤其是JS这种松散型的语言。其中比较常用的方法就是Number()方法和ParseInt()/ParseFloat()方法了,下面我们分别对这几种方法的转型机制进行详细地说明。
Number()
如果传入的参数为字符串,则遵循以下规则:
如果字符串中只包含数字,则返回相应的数字值(前导的0会被忽略)
如果包含浮点和负号,则返回相应的小数或负数
如果是16进制数字,则返回相应的10进制数
如果包含空格,则开始和结束的空格会被忽略,如果中间包含空格则会返回NaN
如果是空字符串,则返回0
如果包含除去以上情况的其它字符,则返回NaN
如果传入的参数为true/false,则返回1/0
如果传入的参数为null,则返回0
如果传入的参数为undefined,则返回NaN
如果是数字,则简单的返回数字值
如果是对象,则调用对象的valueOf()方法,将所得值按照以上规则进行转型,如果得到NaN,再调用对象的toString()方法,将所得的值按以上规则进行转型
总体来说Number()方法的转型机制比较复杂且难懂,一般我们手动调用转型方法会使用parseInt()/parseFloat()方法进行转型,下面介绍这两个方法的转型机制。
parseInt()/parseFloat()如果传入的参数为字符串,则则从第0个位置开始,找到第一个非空格字符,如果第一个非空格字符不是数字或-号,则返回NaN,如果是数字或-号,则继续往下寻找,直到找到非数字字符,然后忽略后面的内容,返回前面找到的数字值(前导的空格会被忽略,中间的空格则会当成非数字字符处理)
如果是boolean,null,undefined类型值,则返回NaN
如果需要对8进制或者16进制的数进行转型,ECMAScript 3和ECMAScript 5有所不同,所以推荐传入第二个参数,即进制数
如果是对象,则调用对象的toString()方法,将所得值再按照以上方法进行转型
*以上只说明了parseInt()方法的机制,parseFloat()方法与其只有一个区别,即parseFloat()方法遇到第一个浮点会继续往下寻找
下面举一些典型的例子,对以上机制进行验证和说明
console.log(Number("12a")); //NaN console.log(Number("")); //0 console.log(Number(null)); //0 console.log(Number(undefined)); //NaN console.log(Number(true)); //1 console.log(Number(false)); //0 console.log(Number([]); //0 console.log(parseInt("-1-2a")); //-1 console.log(parseInt("-a2a")); //NaN console.log(parseInt(" 12a")); //12 console.log(parseInt("1 2a")); //1 console.log(parseInt("")); //NaN console.log(parseInt(null)); //NaN console.log(parseInt(undefined));//NaN console.log(parseInt(true)); //NaN console.log(parseInt(false)); //NaN console.log(parseInt([])); //NaN
以上便是所总结的Number()和parseInt()/parseFloat()方法的转型机制,特别说明:大部分规则摘自《JavaScript高级程序设计第三版》。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/82179.html
摘要:数值转换对个人而言是非常重要的,这也是本人单独拉出来总结的一个原因。在此也仅针对显示转换做点文章,隐式转换同样会单独拉出来总结有个函数可以把非数值转换为数值和。如果是值,和将分别被转换为和。如果是数字值,只是简单的传入和返回。 数值转换对个人而言是非常重要的,这也是本人单独拉出来总结的一个原因。在此也仅针对显示转换做点文章,隐式转换同样会单独拉出来总结 有 3 个函数可以把非数值转换为...
摘要:函数在转换字符串时,更多的是看其是否符合数值模式。例如,会被转换为,因为会被完全忽略。类似地,会被转换为,因为小数点并不是有效的数字字符。指定基数会影响到转换的输出结果。举例来说,将会被转换为。但十六进制格式的字符串则始终会被转换成。 以下三个函数将非数值转换为数值:Number() 、parseInt()和 parseFloat() Number()的转换规则 Boolean值 ...
摘要:本文主要介绍数据类型强制转换和自动转换,自动转换是基于强制转换之上。强制转换主要指使用和三个函数,手动将各种类型的值,分布转换成数字字符串或者布尔值。 前言 JavaScript是一门动态语言,所谓的动态语言可以暂时理解为在语言中的一切内容都是不确定的。比如一个变量,这一时刻是个整型,下一时刻可能会变成字符串了。虽然变量的数据类型是不确定的,但是各种运算符对数据类型是有要求的。如果运算...
摘要:本文主要介绍数据类型强制转换和自动转换,自动转换是基于强制转换之上。强制转换主要指使用和三个函数,手动将各种类型的值,分布转换成数字字符串或者布尔值。 前言 JavaScript是一门动态语言,所谓的动态语言可以暂时理解为在语言中的一切内容都是不确定的。比如一个变量,这一时刻是个整型,下一时刻可能会变成字符串了。虽然变量的数据类型是不确定的,但是各种运算符对数据类型是有要求的。如果运算...
摘要:本文主要介绍数据类型强制转换和自动转换,自动转换是基于强制转换之上。强制转换主要指使用和三个函数,手动将各种类型的值,分布转换成数字字符串或者布尔值。 前言 JavaScript是一门动态语言,所谓的动态语言可以暂时理解为在语言中的一切内容都是不确定的。比如一个变量,这一时刻是个整型,下一时刻可能会变成字符串了。虽然变量的数据类型是不确定的,但是各种运算符对数据类型是有要求的。如果运算...
阅读 2510·2021-11-18 10:02
阅读 1975·2021-11-09 09:45
阅读 2398·2021-09-26 09:47
阅读 1010·2021-07-23 10:26
阅读 1062·2019-08-30 15:47
阅读 3356·2019-08-30 15:44
阅读 956·2019-08-30 15:43
阅读 880·2019-08-29 13:50