基本包装类型
JavaScript 中提供 3 个基本包装类型:Number
,Boolean
和String
。这些包装类型中提供了一些常用的处理方法,比如 toFixed
,substring
,split
等。
自动拆装箱
这几个基本包装类型中提供了操作 number
、string
、boolean
中的一些特殊方法,但我们在使用这些方法的时候,并不会手动去创建一个包装类型的实例,而是可以直接在基本数据类型上使用这些方法。这是因为我们在使用基本数据类型时会自动进行拆装箱操作。
(1).toFixed(2) //"1.00"
"hello".split("") //["h", "e", "l", "l", "o"]
我们在使用 .
点操作符来调用相应的方法或者属性时,会自动进行如下的几步处理:
- 创建一个基本包装类型的实例
- 在实例上调用相应的属性或方法
- 销毁这个实例
也就是说,在使用 .
点操作符“调用”这些基本数据类型上的属性或方法时,会自动进行装箱操作,将基本数据类型装换为相应的包装类型,在执行完这一步操作后,再自动拆箱,销毁先前创建的包装类型。
不能为基本数据类型添加属性
上面谈到,在使用 .
点操作符(当然,对于[]
属性访问符也是如此)对数据进行操作时,会创建一个对应的包装类型对象,而操作完成后,立马销毁这个包装类型的对象。因此,我们是无法为基本数据类型添加属性的。看下面代码:
let name = "MIKE"
name.id = 1
name.id //undefined
上面的代码运行时会进行以下几个步骤:
- 声明一个
name
变量 - 访问
name
的id
属性,用到了.
点操作符,于是创建一个对应的包装类型对象 - 为这个对象添加一个
id
为1
的属性 - 销毁这个对象
- 访问
name
的id
属性,又用到了.
点操作符,于是又创建一个新的包装类型对象 - 由于是一个全新的对象,自然其的
id
属性就是undefined
,前面id
为1
的那个对象已经被销毁了 - 再次销毁这个第二次创建的包装对象
类型转换
使用 new
关键字调用包装函数会创建新的包装类型对象,如果直接调用包装类型的函数,并传入某个参数,就可以用来进行数据转换。
let str2Num = Number("25") //25
let bool2Num = Number(true) //1
...
使用类型转换方式调用包装函数,得到的仍然是基本数据类型。需要注意的是,基本数据类型的值不是其对应包装类型的实例。
str2Num instanceof Number //false
"hello" instanceof String //false
同时,包装类型的实例在转为 boolean
类型时总是 true
。
let boolObj = new Boolean(false)
boolObj && concole.log("真") //输出 "真"
Object 工厂
作为所有类的基类,Object
也可以接受一个基本类型的值,然后创建一个相应的包装类型对象。
let object2Num = new Object(123)
let object2Bool = new Object(true)
let object2String = new Object("hello")
object2Num instanceof Number //true
object2Bool instanceof Boolean //true
object2String instanceof String //true
常用方法
下面列出一些常用的操作方法。
1.Number 类型
toFixed
toExponential
toPrecision
2.String 类型
charAt
charCodeAt
- 使用
[]
获取某个位置的字符(类似charAt
) slice
substring
substr
indexOf
lastIndexOf
trim
match
replace
toUpperCase
toLowerCase
toLocaleUpperCase
toLocaleLowerCase
localeCompare
完。