每天对自己多问几个为什么,总是有着想象不到的收获。 一个菜鸟小白的成长之路(copyer)
valueOf() 和 toString()的返回值
valueOf()
语法:
object.valueOf()
返回值:
返回值为该对象的原始值。
JavaScript的许多内置对象都重写了该函数,以实现更适合自身的功能需要。因此,不同类型对象的valueOf()方法的返回值和返回值类型均可能不同。
对象 | 返回值 |
---|---|
Array | 返回数组对象本身。 |
Boolean | 布尔值。 |
Date | 存储的时间是从 1970 年 1 月 1 日午夜开始计的毫秒数 UTC。 |
Function | 函数本身。 |
Number | 数字值。 |
Object | 对象本身。这是默认情况。 |
String | 字符串值。 |
Math 和 Error 对象没有 valueOf 方法。 |
toString()
语法:
obj.toString()
JavaScript的许多内置对象都重写了该函数,以实现更适合自身的功能需要。
对象 | 返回值 |
---|---|
Array | toString() 方法可把数组转换为字符串,并返回结果(以逗号分隔)JavaScript toString() 方法 | 菜鸟教程 (runoob.com) |
Boolean | 把布尔值转换为字符串,并返回结果。 |
Date | toString() 方法可把 Date 对象转换为字符串,并返回结果。JavaScript toString() 方法 | 菜鸟教程 (runoob.com) |
Function | 转化函数字符串 |
Number | 把数字转换为字符串 |
Object | 默认情况, 返回一个字符串 [object Object] |
String | 返回一个字符串 |
参考资料:
Object.prototype.valueOf() - JavaScript | MDN (mozilla.org)
JavaScript toString() 方法 | 菜鸟教程 (runoob.com)
Number() 、parseInt()、parseFloat的使用与区别
Number(object)
转化规则:
-
如果是Boolean类型,true转化为1,false转化为0
-
如果是number类型,就是简单的传入和传出
-
如果是null,返回0
-
如果是undefined,返回NaN
-
如果是字符串,分为以下几种情况:
- 字符串只包含数字,转为十进制,会忽略前面的0
- 如果字符串中包含有效浮点格式,如“1.1”,将其转换为对应的浮点数字,忽略前导0
- 如果字符串中包含有效的十六进制格式,如“0xf”,将其转换为相同大小的十进制数值
- 如果字符串为空,将其转换为0
- 其他的情况的字符串,转化为NaN
-
如果是对象类型,则先调用对象的
valueOf()
,然后在按照上面的规则进行转化,返回结果。如果返回的结果为NaN,则在调用toString()
,然后再依照前面的规则转换返回的字符串值
Number对基本数据类型的转化
console.log(Number(true)); // 1
console.log(Number(false)); // 0
console.log(Number(null)); // 0
console.log(Number(undefined)); // NaN
//字符串
console.log(Number('0xfff')); // 4095
console.log(Number('0022')); // 22
console.log(Number('00.20')); // 0.2
console.log(Number("")); // 0
Number对复杂数据类型转化
console.log(Number({})); //NaN 调用toString
console.log(Number([12])); //12 调用toString
let date = new Date()
console.log(Number(date)); //1627971710701 调用valueOf
parseInt(Object, redix)
转化规则:
- parseInt()函数在转换字符串时,会忽略字符串前面的空格,知道找到第一个非空格字符。
- 如果第一个字符不是数字或者负号,parseInt() 就会返回NaN,同样的,用parseInt() 转换空字符串也会返回NaN
- 如果第一个字符是数字字符,parseInt() 会继续解析第二个字符,直到解析完所有后续字符串或者遇到了一个非数字字符。
还可以接受第二个参数: 转化进制(默认十进制)
var num1 = parseInt("AF",16); //175
var num2 = parseInt("AF"); //NaN
var num3 = parseInt("10",2); //2 (按照二进制解析)
var num4 = parseInt("sdasdad"); //NaN
parseFloat()
基本跟parseInt的方法一样的解析。
根本区别:
- parseFloat() 所解析的字符串中第一个小数点是有效的,而parseInt() 遇到小数点会停止解析,因为小数点并不是有效的数字字符。
- parseFloat() 始终会忽略前导的零,十六进制格式的字符串始终会被转换成0,而parseInt() 第二个参数可以设置基数,按照这个基数的进制来转换。
参考资料:
Number()、parseInt() 和 parseFloat() 的区别_fannnnnn的博客-优快云博客_number parsefloat