美文网首页我爱编程
2018-03-28 浅谈JS的包装对象

2018-03-28 浅谈JS的包装对象

作者: 无欲而为 | 来源:发表于2018-03-28 14:01 被阅读0次

JS提供了11种引用类型:Object、Array、Date、Function、Error、RegExp、Math、Number、String、Boolean、Globle。其中包括了三种基本包装类型,也就是Number、String和Boolean,它们是特殊的引用类型,既与其他的引用类型相似,同时又具有与各自的原始类型相应的特殊行为。

一、什么是包装类型?

因为这字符串、数值、布尔三种原始类型的值,在一定条件下会自动转化为对象,因此被称为原始类型的“包装类型”。

例如:var a1="some text";

var a2=a1.substring(0,2);

console.log(a2);//"so"

上面这个例子中,变量a1是一个字符串,字符创必然是基本类型的值,但是它却在第二行调用了substring()方法,并将结果返回保存在a2中,我们都知道,既然a1是基本类型的值而不是对象,因而从逻辑上讲,它是没有方法的。其实在在实现这个操作的时候,JS内部已经隐式地帮我们帮创建了一个包装对象了,以上的实际的情形应该是这样的:

var a1=new String("some text");

var a2=a1.substring(0,2);

a1=null;

console.log(a2);//"so"

但是这两种方式还是有区别的:

区别一:浏览器自己隐式创建的包装对象和你显式创建的包装对象不严格相等。

var a1="test";

var a2=new String("test");

console.log(a1==a2);//true

console.log(a1===a2);//false

区别2:隐式创建的包装对象,在使用完后之后就会被销毁了。例如:

var s1="some text";

var s1.color="red";

console.log(s1.color);//undefined

上面的代码,在第二行代码试图为一个字符s1添加一个color属性,但是当第三行再次访问的时候,color属性已经不见了。原因就是第二行代码创建的String对象在执行第三行代码时已经被销毁了,第三行代码又创建来了自己的String对象,可是没有了color属性,所以最终返回的值是undefined。

在实际运用中,我们可以显式的调用String、Number和Boolean来创建基本包装类型的对象,不过,应该在绝对必要的时候再这么做,因为这种做法很容易让人分不清自己是在处理基本类型还是引用类型。对基本包装类型的实例调用 typeof 会返回object。

二、包装类型和引用类型的区别

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

相关文章

  • 2018-03-28 浅谈JS的包装对象

    JS提供了11种引用类型:Object、Array、Date、Function、Error、RegExp、Math...

  • js包装对象

    ECMAScript 提供了 3 个特殊的引用类型:Boolean、Number和 String。这些类型与其他引...

  • js 包装对象

    原因由于s是一个字符串,在执行第二行中,s.len = 4;;时生成一个临时对象,临时对象在执行完之后则被销毁。故...

  • JS包装对象

    包装对象 定义 对象是 JavaScript 语言最主要的数据类型,三种原始类型的值——数值、字符串、布尔值——在...

  • 廖雪峰JS小记

    (function(){})() 原型,原型链 浅谈Js原型的理解JS 原型与原型链终极详解 对象 对象:一种无序...

  • js的包装对象

    在另一篇文章 js的new运算符详解 提到过包装对象,这里详细解释下。 我们之前说string、number 和 ...

  • js:标准对象/包装对象

    一、在JavaScript的世界里,一切都是对象。 但是某些对象还是和其他对象不太一样。为了区分对象的类型,我们用...

  • 浅谈JS中的面向对象

    浅谈JS中的面向对象 本文主要说说本人在JS中对面向对象的理解。 计算机编程语言主要分为面向过程式编程和面向对象式...

  • 浅谈WKWebView使用、JS的交互

    浅谈WKWebView使用、JS的交互 浅谈WKWebView使用、JS的交互

  • Javascript面向对象之组件

    高级面向对象 包装对象(13) js基于原型的程序 String Number Boolean 原型链(14) 实...

网友评论

    本文标题:2018-03-28 浅谈JS的包装对象

    本文链接:https://www.haomeiwen.com/subject/rgiycftx.html