JavaScript Data Types--object
Object类型
ECMAScript中的对象其实就是一组数据和功能的集合。对象是没有顺序的
对象与原始类型有以下区别
- 对象有属性
- 有方法
- 可以改变
对象的分类
内部对象,就是js语言本身自带的一些对象
js中一共有17个内部对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
1. 错误对象 2 常用对象,有八种 i. Boolean ii. String iii. Number iv. 数组 v. 日期 vi. Function vii. Object viii. 正则表达式 3. 内置对象 i. Math ii. Global iii. Json
- 数组对象
- 自定义对象
上面的常用对象都有自己的toString()方法
- 如果对数组使用toString()方法,他会把数组里面的每个值转化成字符串,然后用逗号隔开
- 如果是一个函数,得到的是当前函数的源代码
- 日期,得到的是日期和时间的字符串
- 正则表达式,会把正则表达式直接用字符串表示出来,其中的转义符也会表达出来
还有一个方法valueOf()
它的作用是,如果你的方法有原始值,它会直接把原始值返回回来,如果没有,就把对象本身返回回来。
这里有个例外,日期,返回的是当前的时间和1970年7月1号中间差的毫秒数。
那么把一个对象转化成字符串的过程如下
- 它会首先调用toString()方法,如果能够得到一个字符串,直接返回对应的字符串;如果不能,会调用valueOf()方法。否则抛出异常
- 把对象转化成数字,过程是与上面相反的。
像基础类型一样,对象中也有方法,将其他类型数据转化成对象,Object()
- 将字符串类型转化成类型,会多一个属性,length,它会把字符串拆开,你可以去读它的属性,比方说下面的例子,
1
c[0]=1,c[1]=2
Ps:原始数据类型的比较是值的比较,对象的比较是引用的比较。
当然对象也可以转化为原始数据类型。
这其中 boolean类型的转化中会有一些问题,看下面的代码
Object的每个实例都具有下列属性和方法
- Constructor:保存着用于创建当前对象的函数
- hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中作为参数的属性名(propertyName)必须以字符串以字符串形式指定(例如:o.hasOwnProperty(“name”))
- isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型
- toLocalString():返回对象的字符串表示,该字符串与执行环境的地区对应
- toString():返回对象的字符串表示
- valueOf:返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同
创建Object有三种方式
- 使用new操作符后跟Object构造函数
1
2
3
var person = new Object();
person.name = 'fantaishao';
person.age = 29;
使用对象字面量
1 2 3 4
var person = { name: 'fantaishao', age: 29 }
Es5中新方法, Object.create方法,它有两个参数,第一个要继承的原型,第二个是对象的属性
访问对象的属性有两种方法
- Person.name
- Person[‘name’]
从功能上看,这两种方法没有任何区别。但方括号语法的主要优点是可以通过变量来访问属性,如下:
1
2
Var propertyName = 'name';
Console.log(person[propertyName])// 'fantaishao'
对象方法访问属性的过程,如果碰到. 或者[],
- js解释器会先去判断.前面的值是不是undefined或者null,
- 如果是,会抛出异常;
- 如果不是,看前面的值是不是一个对象,
- 如果不是,会把前面的值转化成一个对象,
- 然后判断后面是不是.,
- 如果是,会把值返回
- 如果是[],会先去计算[]里面的值,把结果转换成字符串,然后把对应的值返回。
- 如果对应的值不存在,则返回undefined
如果属性名中包含会导致语法错误的字符,或者属性名使用的是关键字或保留字,也可以使用方括号表示法。
1
Person['first name'] = 'fantaishao';
由于’first name’中包含了一个空格,所以不能使用点方法来访问。
然而属性名中是可以包含非字母非数字的,这时候可以使用方括号来访问它们。
通常,除非必须使用变量来访问属性,否则建议使用点来访问
This post is licensed under CC BY 4.0 by the author.