js基础_包装类
基本数据类型
String Number Boolean Null Undefined
引用数据类型
Object
在JS中为我们提供了三个包装类,通过这三个包装类可以将基本数据类型的数据转换为对象
String()
—-可以将基本数据类型字符串转换为String对象
Number()
—-可以将基本数据类型的数字转换为Number对象
Boolean()
—-可以将基本数据类型的布尔值转换为Boolean对象
创建一个Number类型的对象
var num=new Number(3);
console.log(num);
输出结果为3
但是:我们在实际应用中不会使用基本数据类型的对象,如果使用基本数据类型的对象,在做一些比较时可能会带来一些不可预期的结果。
方法和属性只能添加给对象,不能添加给基本数据类型,当我们对一些基本数据类型的值去调用属性和方法时,浏览器(解析器)会临时使用包装类将其转换为对象,然后再调用对象的属性和方法,调完以后,在将其转换为基本数据类型。
比如:
var s=123;
s=s.toString();//浏览器将s转为为了Number的对象,然后调用的是Number对象的tostring()方法,而不是基本数据类型number s 的tostring()方法
console.log(typeof s);//其输出结果为string
比如,给基本数据类型添加属性:
var s=0;
s.hello=’你好’;//这里因为是基本数据类型,所以添加属性浏览器临时将其转换成立一个对象,执行完了之后这个对象就被销毁了。所以,属性自然也没了,只有刚刚被转换时存在。
console.log(s.hello);//输出结果为undefined,这里又被转换为了一个对象,因为这里对基本数据类型使用其属性,但是这个临时被转的对象和上一步被转换的对象不相同,也没有使用new关键字声明对象,所以这个对象里也没有该属性。
所以,包装类是给浏览器底层自己用的。
我们使用基本数据类型的String能够直接使用String对象方法和属性也就是因为基本数据类型临时被转为了String对象。(自动装箱和拆箱)