js的包装对象
来源:互联网 发布:js贪吃蛇 编辑:程序博客网 时间:2024/06/06 02:30
字符串不是对象,为什么它会有属性?
只要引用字符串的属性,JavaScript就会将字符串值通过调用 new String()的方式转换成对象,这个对象继承了字符串的方法,并被用来处理字符串的属性的引用。一旦引用结束,这个新的对象就会被销毁(实际实现上并不一定创建或销毁这个临时对象,然而整个过程看起来是这样)。同理数字和布尔也有各自的Number()和Boolean()构造函数创建临时对象,这些方法的调用匀是来自临时对象。null和 undefined没有包装对象:访问它们的属性会造成一个类型错误。
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);//trueconsole.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操作符创建的引用类型的实例,在执行流离开当前作用域之前都一直保存在内存中。而自动穿件的基本包转类型的对象,则只存在于一行代码的执行期间,然后立即被销毁,这也意味着我们不能在运行时为基本类型添加属性和方法。
- js的包装对象
- 浅谈JS的包装对象
- js中的包装对象
- js包装对象
- JS原生获取对象的所有属性-函数包装
- 包装对象的理解
- 【js学习笔记-018】-- 包装对象
- js基础类型之包装对象
- js中的原始值和包装对象
- 【面向JS--内置对象与包装类型】
- 基本数据类型的包装对象
- 凤凰网广告包装的js
- js的基本包装模型
- js数组:string(字符串的对象包装类型),Array(引用类型)
- jquery包装集, jquery对象与js对象转换
- JS学习之包装对象与日期对象
- 包装对象
- 包装对象
- RabbitMq(三)
- iOS NSFileManager管理目录路径(3)——文件大小
- 3.LabVIEW_USB_I2C_AM2321B
- AutoIt:Windows自动化测试
- scala map排序
- js的包装对象
- (7)约瑟夫问题
- 【华为】数独
- php mcrypt加密实例
- LeetCode: 476. Number Complement
- 万能地图下载器矢量标注功能特性
- Java语言基础{Java_se(02)}-字面量和常量-变量的基本定义和使用-Java表达式-数据类型和分类-基本数据类型的转换-算数运算符-赋值运算符-比较运算符-三元运算符-逻辑运算符
- Effective Java(一)—— 创建和销毁对象
- 创建第一个线程