Post

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()方法

  1. 如果对数组使用toString()方法,他会把数组里面的每个值转化成字符串,然后用逗号隔开
  2. 如果是一个函数,得到的是当前函数的源代码
  3. 日期,得到的是日期和时间的字符串
  4. 正则表达式,会把正则表达式直接用字符串表示出来,其中的转义符也会表达出来

还有一个方法valueOf()

它的作用是,如果你的方法有原始值,它会直接把原始值返回回来,如果没有,就把对象本身返回回来。

这里有个例外,日期,返回的是当前的时间和1970年7月1号中间差的毫秒数。

那么把一个对象转化成字符串的过程如下

  1. 它会首先调用toString()方法,如果能够得到一个字符串,直接返回对应的字符串;如果不能,会调用valueOf()方法。否则抛出异常
  2. 把对象转化成数字,过程是与上面相反的。

像基础类型一样,对象中也有方法,将其他类型数据转化成对象,Object()

  • 将字符串类型转化成类型,会多一个属性,length,它会把字符串拆开,你可以去读它的属性,比方说下面的例子,
1
c[0]=1,c[1]=2

/assets/img/8.png

Ps:原始数据类型的比较是值的比较,对象的比较是引用的比较。

当然对象也可以转化为原始数据类型。

这其中 boolean类型的转化中会有一些问题,看下面的代码

  1. 转化成布尔类型,结果都是true
  2. 转化成number类型
  3. 转化成字符串 /assets/img/8.png

Object的每个实例都具有下列属性和方法

  1. Constructor:保存着用于创建当前对象的函数
  2. hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中作为参数的属性名(propertyName)必须以字符串以字符串形式指定(例如:o.hasOwnProperty(“name”))
  3. isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型
  4. toLocalString():返回对象的字符串表示,该字符串与执行环境的地区对应
  5. toString():返回对象的字符串表示
  6. valueOf:返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同

创建Object有三种方式

  1. 使用new操作符后跟Object构造函数
1
2
3
        var person = new Object();
        person.name = 'fantaishao';
        person.age = 29;
  1. 使用对象字面量

    1
    2
    3
    4
    
        var person = {
            name: 'fantaishao',
            age: 29
        }
    
  2. Es5中新方法, Object.create方法,它有两个参数,第一个要继承的原型,第二个是对象的属性

访问对象的属性有两种方法

  1. Person.name
  2. 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.