写在前头
大多数小伙伴看技术书籍都会用“啃”来描述读书的直观感受,当然我也是一个前端小白,白的透明那种,但是我在读技术书籍感觉到“啃”的时候,我希望把我啃红宝书第四版的过程的想法,总结带给大家,以供后来者能够更快上手。
注: 本文由于作者水平原因,如有错误之处,恳请大家指正,另外随着学习的深入,体会的加深,我会不断回来更新,修改这类文章。
思维导图
脉络
这小节就是介绍了3.4数据类型中的3.4.5Number类型的5. 数值转换。
3.4数据类型
3.4.5Number类型
5. 数值转换
一、用于任何数据类型
Number()函数。这个函数可以将任何数据类型转换为数值。
规则(6个)
- 原始类型
- undefined,null
undefined -> NaN,null-> 0
- Boolean
true -> 1, false-> 0
- 数值
数值(n进制)->数值(十进制)
<script> const result1 = 0x12; // 十六进制 console.log(result1); // 18 console.log(Number(result1)); // 18 const result2 = 012; // 八进制 0o12也ok console.log(result2); // 10 console.log(Number(result2)); // 10 </script> 复制代码
- 符号类型
书中原话:符号类型不能转换为数值
- 字符串
总结: 空变0,前面0去掉,进制均变十,符号正可以去,负得留。其他一律NaN
①空字符串包含数值字符
②包含数值字符
③包含有效的浮点值格式
④包含有效的十六进制格式
⑤其他字符
- 对象
- 返回原始类型的值
valueOf()方法,每个对象都自带这个方法,当使用这个方法返回的是原始值,转换规则和上面6个一样。
补充
valueOf()方法:
①JavaScript 自动调用
②可以继承
valueOf() 默认应用以下规则
①调用对象为 Date 的实例 (详情看第五章的Date对象)
②调用对象为原始值包装类型的实例 (详情看第五章的原始值包装类型)
有Number,Boolean,String引用类型
③调用对象为其他对象
- 返回对象
调用对象自身的 toString()方法
①如果返回原始类型的值,则直接对该值使用上述规则
②数组的 valueOf() 方法返回对象本身
默认返回每个元素的toString() 结果并以逗号连接的字符串(第六章6.2.7会详细写到数组的toString(),valueOf()方法的使用)。
console.log(Number([1, 2])); // valueOf()返回[1,2] toString()返回1,2 最后使用字符串规则又返回NaN 复制代码
③对象的 valueOf() 方法返回对象本身
返回字符串 '[ObjectObject]',之后再应用字符串的转换规则
④toString()方法返回的是对象,则报错
二、字符串转换为数值
parseInt()
- 目的是为了得到整数(优先使用)
- 与Number()函数的区别
Number()函数转换字符串时相对复杂且有点反常规(原话)
- 规则
①前面空格会被忽略
parseInt()从第一个非空字符开始转换。
②第一个字符是数值字符、加号或减号
一直转换直到遇到非数值字符否则会一直转换到字符串末尾。
不同的整数格式
十进制,八进制,十六进制均可以识别。
复习: 严格模式八进制必须0o前缀
第二个参数
作用:表示第一个参数是什么进制的,有了第二个参数告知进制是几的前提下,可以将第一个参数的0x(十六进制),0o(八进制)去掉。
③第一个字符不是数值字符、加号或减号
立刻返回NaN,停止转换。
parseFloat()
- 目的是为了得到浮点数
- 与parseInt()相似之处
①前面空格会被忽略
- 与parseInt()不同之处
①第一次出现的小数点是有效的
②它始终忽略字符串开头的零。这个函数能识别前面讨论的所 有浮点格式,以及十进制格式(开头的零始终被忽略)。
③只解析十进制值,十六进制数值始终会返回 0。