版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
一、基础知识
- 强制转换:首先强制转换说的是3个构造函数,分别是Number()、String()、Boolean()他们的作用就是将各类型的内容转换成对应的值【数字、字符串、布尔值】
- 原始值:原始值首先代表的是5大基础类型值因为他们不能再被细化,是最单纯的值。分别是:undefined、null、boolean、number、string。他们因为长度大小固定,一般存在栈(stack)中,方便快速查找
- 复杂值:Object、Function、Array、Date、RegExp这些都是复杂值,因为他们在内存中的大小是未知的,可以包含任何值,不是特定值。他们不适合存在栈中,所以存在堆中,栈里只存放一个指针,指针指向它的内存地址
- toString(): 需要返回对象的字符串,可以做进制转换。null和undefined不能调用toString()方法
- valueOf() :需要返回的是对象的原始值
二、 Number()
Number()的类型转换
原始值转换规则如下
- 数值:转换后还是数值
- 字符串:“123”转换后是123,“abc”转换后是NaN,而且由于Number函数非常严谨,只要字符串中有不可转换成数值的字符,就会显示NaN,空字符串是0。
- 布尔值: true是1 false是0
- undefined:转换NaN
- null:转换成0
复杂值转换规则:
复杂值转换首先会调用valueOf方法如果能返回原始值也就是(数字,字符串,布尔)就不在进行后续操作,直接执行Number()
如果返回的不是原始值,就会执行toString()方法,toString返回的是原始值就执行Number(),返回的还不是原始值就返回NaN
parseInt 和 Number 的区别:
- parseInt在处理时会逐个字符识别转换,遇到空格、非数字时才会停止识别转换,显示之前处理的结果。
- Number是把当前字符作为一个整体,只要有不符合要求的地方返回的就是NaN。
- 两者共同之处:\v \r \t \n \f等这种特殊空白符两者都会默认转化.
三、String()
- String() 类型转换之后都会变成 string 类型
- 原始类型值会直接使用String()转化
- 复杂类型调用valueOf方法时如果返回了原始类型值就使用String()转化
- 如果不是原始类型值的话,就会报错
四、Boolean()
只有6种情况会返回false,其他情况都是返回true
- Boolean(undefined)
- Boolean(null)
- Boolean(-0)
- Boolean(+0)
- Boolean(NaN)
- Boolean("")