您的位置:首页 > Web前端 > JavaScript

javascript类型系统——包装对象

2017-03-25 16:28 267 查看
javascipt对象是一个复合值,他是属性或者是一直命名值的集合,通过’.’来引用属性值,当属性值是一个函数的时候,称其为方法。通过o.m()来调用对象o中的方法,字符串也是同样具有属性和方法。

var string = 'hello world';
console.log(string.length);//11;


既然字符串不是对象,为什么会有属性呢 ,今天总结学习其正规的说法,就是包装对象了。

定义

在javascript中,‘一切皆对象 ’,就连三种原始类型的值(数值,字符串,布尔值),在一定的条件下,也是可以转化为对象的。也就是原始类型的‘包装对象’,包装对象是特殊的引用类型。每当读取字符串,数值或者布尔值的属性或者方法时,创建的临时对象叫做‘包装对象’

为了便于引用字符串的属性或者方法,javascript将字符串通过调用new String()的方法转化成对象,这个对象继承了字符串的属性和方法,并被用来处理属性和方法的引用,一旦属性和方法引用结束,这个新创建的对象就会被销毁。数字或者布尔值也类似。

注意:实际上并不一定创建或者销毁这个对象,这个过程看起来是这样:

var str1='hello world';
var s2 = str1.substring(2);
//上述其实有三个过程
var str1 = new String('hello world');//创建一个String类型的实例
var s2 = str1.substring(2);//在实例上调用指定的方法
s1 = null;//销毁这个实例。


生存期

引用类型和基本包装类型的主要区别是是对象的生存期,使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前,一直保存在内存中。而自动创建的基本包装类型,只是在一行代码的执行瞬间,然后立即被销毁。这意味着不能在运行时为基本类型添加属性或者是方法。

var s1 = 'some text';
s1.color = 'red';
alert(s1.color);//undefined


var s2 = new Boolean('some text');
s2.color = 'red';
alert(s2.color);//'red'


显示创建

可以通过new 操作符创建包装对象,但是应该实在绝对必要的情况下这样去做,应为这种做法很容易让人分不清楚是在处理包装对象还是引用类型的值。

Object方式

var s = new Object('abc');
var r = new Object(true);
var g = new Object(1232);


构造函数的方式

var s = new String('asdf');
var g = new Boolean(true);
var n = new Number(123);


转型函数

直接调用转型函数与使用new调用基本的包装类型的构造函数是不一样的,使用转型函数返回的是基本的类型值。

var s = 'hjkl';
var s1 = String(s);
var s2 = new String(s);;
var s3 = new Object(s);
console.log(typeof s,typeof s1,typeof s2,typeof s3);//string string object object


比较运算

1: 等于运算符’==’.将原始值和包装对象视为相等,因为其中一个操作数是对象,需要调用对象的valueOf方法,Number对象,Boolean对象和String对象的valueOf方法都是返回其对应的原始值,

var s1 = new String('abc');
var s2 = 'abc';
var n1 = new Number(123);
var n2 = 123;
var b1 = new Boolean(true);
var b2 = true;
console.log(s1 == s2, n1 == n2, b1 == b2);//true true true


2:全局运算符’===’将原始值个包装对象视为不相等 ,因为全局运算符要比较类型和数值。原始值个包装对象的类型不同

var s1 = new String('abc');
var s2 = 'abc';
var n1 = new Number(123);
var n2 = 123;
var b1 = new Boolean(true);
var b2 = true;
console.log(s1 === s2, n1 === n2, b1 === b2);//false false false
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript