包装类——javascript
首先了解一下js中的数据类型,js中的数据类型分为两大门派,原始数据类型和引用数据类型
原始数据类型:boolean String number null undefined
引用数据类型:object(其实就是对象)
引用数据类型有自己的方法和属性,原始数据类型是没有的,但是在原始数据类型中有三个特殊的存在:String boolean number(也被称做基本包装类型),有自己对应的包装对象,并且有相应的属性和方法。
创建一个字符串类型或者数字类型,然后使用字符串或者数字类型的方法时,后台就会悄咪咪的创建一个对应的基本包装类型的对象,这个基本包装类型的对象相对于new一个对象,在对象调用完后,就会被销毁,再去访问就是undefined,只是存在一瞬间,所以无法给基本包装类型添加方法(运用原型可以g给基本包装类型添加方法),举个例子:
var str = 'hello';
str.number = 10; //假设给字符串添加number属性,后台的操作如下
{
var str = new String('hello'); //找到对应的包装类型对象,然后通过包装对象,创建一个和基本类型值相同的对象
str.number = 10; //通过这个对象,调用包装对象的方法,没有被任何东西保存
str =null; //这个对象被销毁
}
alert(str.number); //undefined 运行到这一句话的时候,因为基本类型没有属性,重复上面的步骤,如下
{
var str = new String('hello');
str.number = undefined;
str =null;
}
再来看一个例子:
var str = "abc"; //str = abc
str += 1; //str = abc1
var test = typeof(str); // test = string
if(test.length == 6){ //test为原始数据类型,添加上去会马上销毁
test.sign = "typeof的返回结果是string";
}
console.log(test.sign); //所以最后输出结果为undefined
记住一句话:
不可改变的原始数据类型和可以改变的引用数据类型
解释这句话的含义之前必须知道,对象运行作比较是比较地址的,我们现在来看看这句话的含义:不可改变的原始数据类型指的是不能改变它的地址,如果原始值发生改变,那么地址肯定会发生改变。引用数据类型发生改变后,地址并不会发生变化,所以引用数据类型是可以发生改变的。