资讯专栏INFORMATION COLUMN

《javascript高级程序设计》笔记:Number数值转换

kid143 / 1719人阅读

摘要:数值转换对个人而言是非常重要的,这也是本人多带带拉出来总结的一个原因。在此也仅针对显示转换做点文章,隐式转换同样会多带带拉出来总结有个函数可以把非数值转换为数值和。如果是值,和将分别被转换为和。如果是数字值,只是简单的传入和返回。

数值转换对个人而言是非常重要的,这也是本人多带带拉出来总结的一个原因。在此也仅针对显示转换做点文章,隐式转换同样会多带带拉出来总结

有 3 个函数可以把非数值转换为数值:Number()、parseInt()和 parseFloat()。第一个函数,即转型函数 Number()可以用于任何数据类型,而另两个函数则专门用于把字符串转换成数值

数值转换—Number()

Number()函数的转换规则如下。

如果是 Boolean 值,true 和 false 将分别被转换为 1 和 0。

如果是数字值,只是简单的传入和返回。

如果是 null 值,返回 0。

如果是 undefined,返回 NaN。

如果是字符串,遵循下列规则:

如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即"1" 会变成 1,"123"会变成 123,而"011"会变成 11(注意:前导的零被忽略了);

如果字符串中包含有效的浮点格式,如"1.1",则将其转换为对应的浮点数值(忽略前导零);

如果字符串中包含有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制整数值;

如果字符串是空的(不包含任何字符),则将其转换为 0;

如果字符串中包含除上述格式之外的字符,则将其转换为 NaN。

如果是对象,则调用对象的 valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是 NaN,则调用对象的 toString()方法,然后再次依照前面的规则转换返回的字符串值。

// Boolean
Number(true); // 1
Number(false); // 0

// 数字
Number(12); // 12
Number(012); // 10
Number(0xa1); // 161

// null
Number(null); // 0

// undefined
Number(undefined); // NaN

// string
Number("000011"); // 11
Number("01.1"); // 1.1
Number("0xf"); // 15
Number(""); // 0
Number("Hello world!"); // NaN

// object
Number({a:0}); // NaN toString()后只为"[object Object]"
Number([1,2]); // NaN toString()后值为“1,2”
Number([1]); // 1 toString()后值为“1”
数值转换—parseInt()

由于 Number()函数在转换字符串时比较复杂而且不够合理,因此在处理整数的时候更常用的是 parseInt()函数。parseInt()函数在转换字符串时,更多的是看其是否符合数值模式

转换规则:

从第一位**非空字符**开始判断(忽略字符串前面的空格)
    如果找到的第一位不是数字字符或者负号,parseInt() 就会返回 NaN 
        => 用 parseInt()转换空字符串会返回 NaN(Number()对空字符返回 0)
    如果第一个字符是数字字符,parseInt()会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符
parseInt()能够识别出八进制和十六进制
parseInt("1234blue"); // 1234
parseInt(""); // NaN
parseInt("0xA"); // 10(十六进制数)
parseInt(22.5); // 22
parseInt("070"); // 56(八进制数)
parseInt("70"); // 70(十进制数)
parseInt("0xf"); // 15(十六进制数)

你在试验进制问题的时候可能会有疑问,怀疑是不是我弄错了。因为在使用 parseInt()解析像八进制字面量的字符串时,ECMAScript 3 和 5 存在分歧

//ECMAScript 3 认为是 56(八进制),ECMAScript 5 认为是 70(十进制)
var num = parseInt("070");

因此,书中建议在进行数值转换时,指明转换的基数
指明基数后,不需要在数值前添加‘0’或‘0x’

var num1 = parseInt("10", 2); //2 (按二进制解析)
var num2 = parseInt("10", 8); //8 (按八进制解析)
var num3 = parseInt("10", 10); //10(按十进制解析)
var num4 = parseInt("10", 16); //16(按十六进制解析)
数值转换—parseFloat()

转换规则:

从第一位**非空字符**开始判断(忽略字符串前面的空格)
    如果找到的第一位不是数字字符、负号或者小数点,parseFloat() 就会返回 NaN
        => 用 parseFloat()转换空字符串会返回 NaN(Number()对空字符返回 0)
    如果第一个字符是三者之一,则继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符
        => 字符串中的第 一个小数点是有效的,而第二个小数点就是无效的了,因此它后面的字符串将被忽略

注意:如果字符串包含的是一个可解析为整数的数(没有小数点,或者小数点后 都是零),parseFloat()会返回整数

parseFloat("1234blue"); // 1234 (整数)
parseFloat("0xA"); // 0
parseFloat("22.5"); // 22.5
parseFloat("22.34.5"); // 22.34
parseFloat("0908.5"); // 908.5
parseFloat("3.125e7"); // 31250000

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/84743.html

相关文章

  • javascript高级程序设计笔记Number类型

    摘要:用表示法表示的数值等于前面的数值乘以的指数次幂。下面是一个使用表示法表示数值的例子等于注意浮点类型精度控制的两个方法是原型上实现的一个方法,其作用是对一个浮点数进行四舍五入并保留固定小数位。 进制表示 谈到Number类型,不得不提进制(此处不做过多介绍)八进制字面值的第一位必须是零(0),然后是八进制数字序列(0~7)十六进制字面值的前两位必须是 0x,后跟任何十六进制数字(0~9 ...

    Tychio 评论0 收藏0
  • JavaScript高级程序设计笔记:基本概念

    摘要:一写在前面最近重读高级程序设计,总结下来,查漏补缺。但这种影响是单向的修改命名参数不会改变中对应的值。这是因为对象的长度是由传入的参数个数决定的,不是由定义函数时的命名参数的个数决定的。实际改变会同步,改变也会同步 一、写在前面 最近重读《JavaScript高级程序设计》,总结下来,查漏补缺。 二、JS简介 2.1 JS组成 ECMAscript:以ECMA-262为基础的语言,由...

    ygyooo 评论0 收藏0
  • JavaScript高级程序设计笔记:基本概念(三)

    摘要:数据类型中有种简单数据类型也称为基本数据类型和。因为特殊值被认为是一个空的对象引用。尽管和有这样的关系,但它们的用途完全不同。这样做不仅可以体现作为空对象指针的惯例,而且也有助于进一步区分和。 数据类型 ECMAScript中有5种简单数据类型(也称为基本数据类型):undefined,null,boolean,number和string。 typeof typeof null会返回o...

    jas0n 评论0 收藏0
  • 读书笔记(06) - 语法基础 - JavaScript高级程序设计

    摘要:写在开头本篇是小红书笔记的第六篇,也许你会奇怪第六篇笔记才写语法基础,笔者是不是穿越了。可移步笔者的文章中替换方式参考文档高级程序设计作者以乐之名本文原创,有不当的地方欢迎指出。 showImg(https://segmentfault.com/img/bVblGMc?w=600&h=400); 写在开头 本篇是小红书笔记的第六篇,也许你会奇怪第六篇笔记才写语法基础,笔者是不是穿越了。...

    iOS122 评论0 收藏0
  • 003-读书笔记-JavaScript高级程序设计 基本概念(上)

    摘要:尚未声明的变量,只能执行一项操作,就是检测该变量的数据类型。表示的是空对象指针,因此,使用操作符得到的结果是。 这篇笔记的内容对应的是《JavaScript高级程序设计(第三版)》中的第三章。 1.语法 1-1 区分大小写 ECMAScript 中的一切都是区分大小写的。 test 和 Test 首字母不同,那么它们就不相同 typeof 和 typeOf 中间有个字母大小写不同...

    shmily 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<