本文实例讲述了JavaScript引用类型之基本包装类型。分享给大家供大家参考,具体如下:
为了操作基本类型值,ECDMAScript提供了3个特殊的引用类型——基本包装类型Boolean、Number和String。每当读取一个基本类型值时,后台会创建一个对应的基本包装类型的对象。
var str = "Hello world";var substr = str.substring();
等价于
var str = new String("Hello world");//创建String类型的实例var substr = str.substring();//在实例上调用substring()方法str = null;//销毁实例
基本包装类型是特殊的引用类型,引用类型与基本包装类型的区别如下:
(1)对象的生存期
使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前一直存在于内存中,而自动创建的基本包装类型的对象,只存在于代码执行瞬间,然后立即被销毁,也就是说,不能在运行时为基本包装类型添加属性和方法。
var str1 = "Hello world";var str2 = new String("Hello World");str1.life = 20;str2.life = 20;alert(str1.life);//undefinedalert(str2.life);//20
(2)instanceof操作符测试结果
使用instanceof
操作符测试基本包装类型实例会返回true,测试基本类型值会返回false。
var str1 = "Hello World";var str2 = new String("Hello world");alert(str1 instanceof String);//falsealert(str2 instanceof String);//true
可以显式地调用Boolean、Number、String来创建基本包装类型的对象,但尽可能不要这样做,因为这样不易区分是在处理基本类型还是引用类型。
Object构造函数会根据传入值的类型返回相应基本包装类型的实例。
var str = new String("Hello world");alert(str instanceof String);//truevar num = new Number(16);alert(num instanceof Number);//truevar bool = new Boolean(true);alert(bool instanceof Boolean);//true
对基本包装类型的实例调用typeOf()
方法会返回"Object",实例变量中保存的是基本类型值。
var str = new String("Hello world");alert(typeof str);//objectvar num = new Number(16);alert(typeof num);//objectvar boolean = new Boolean(true);alert(typeof boolean);//object
使用new
操作符调用基本包装类型的构造函数,与直接调用同名的转型函数是不同的,变量中保存的是基本包装类型的实例。
var str = String("Hello world");alert(typeof str);//stringvar num = Number(16);alert(typeof num);//numbervar bool = Boolean(true);alert(typeof bool);//boolean
所有基本包装类型的对象在转换为布尔类型时值都是true。
var boolean1 = new Boolean(false);alert(boolean1);//falsealert(boolean1 && true);//truevar boolean2 = new Boolean(0);alert(boolean2);//falsealert(boolean2 && true);//truevar boolean3 = new Boolean("");alert(boolean3);//falsealert(boolean3 && true);//true
新闻热点
疑难解答
图片精选