【读记】JS高级程序设计-引用类型

# 深挖概念

【关键字】引用类型、类、Object、构造函数、对象

  在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起,也常被称作“类”,但不准确,它们看起来相似,但并不是相同的概念。常见的引用类型有两种,分别是 Object类型 和 Array 类型。
  值得注意的是,这里的Object并不是我们常说的“对象”,其实对象是Object引用类型的实例,同理数组是Array引用类型的实例。通常我们使用new操作符后面跟一个构造函数来创建实例。而Object引用类型的构造函数是Object,Array引用类型的构造函数是Array。解释案例如下:

var person = new Object()

  这行代码创建了Object引用类型的一个新实例,并将其保存在变量person中。其构造函数是Object,其对新实例兑现定义了默认的属性和方法。
小结】引用类型 ≠ 类,类型Object ≠ 对象,类型Object ≠ 构造函数Object

# Object 类型

  Object类型是ECMAScript中使用最多的数据类型,对象是Object类型的实例,主要应用在应用程序中存储和传输数据中,用来封装参数传递。

创建Object实例有两种方式。开发者们更青睐第二种
(1)new操作符 + 构造函数var person = new Object(); person.name = 'zhangfs'
(2)对象字面量表示法var person = { name: 'zhangfs' } 属于(1)的简写形式。但它不会调用Object构造函数。

访问对象属性方法也有两种方式。建议优先用第一种
(1)点表示法var userName = person.name 最常用。
(2)方括号表示法var userName = person['name'] 这种方式可支持变量访问属性,可以访问数值属性,及属性中包含空格等,功能更强大。

# Array 类型

  Array类型是ECMAScript中最最常使用的数据类型,数组是Array类型的实例,ECMAScript数组类型与其他语言的数组有较大差别。它支持每一项存储任何类型的数据,并且数组的调可以动态调整,该长度会随着数据的添加自动增长来容纳新增数据。

创建数组有两种方式,开发者们青睐第二种方式
(1)new操作符 + 构造函数var colors = new Array();
(2)数组字面量表示法var color = []
  值得掌握的是,在使用构造函数创建数组时,如果预先传入了长度,该数组的 length 属性会被定义为该值。除非开发者手动修改了长度或执行了影响长度的逻辑如赋值了超过原length的下标。定义了长度但未定义值的项,值均为undefined
  另外,构造函数方式也可以省略new操作符,也支持传入预先设定好的数组项。如var colors = Array('red', 'blue')

读取和设置数组项使用方括号并提供基于0开始的下标索引
(1)读取:var c0 = colors[0]
  如果下标小于length,返回下标对应项的值。大于等于length返回undefined
(2)设置:color[1] = 'pink'
  如果下标小于length,覆盖下标对应项的值。大于等于lengthlength扩容至该下标加1,并将该值赋值给该下标。这是由ECMAScript数组长度可变特性所提供的。

数组的length属性可以用来在数组末位一处或增加新项。

检测数组类型的方法也有两种,推荐使用第二种。
(1)value instanceOf Array:ECMAScript3 提供了 instanceOf 操作符来检测数组,适用于绝大多数数组类型判断。但当页面存在多个框架存在两个及以上全局执行环境时,即,在其中一个全局环境创建,然后将该变量传入另一个全局环境,在另一个全局环境中使用该方法时将会失效。
(2)Array.isArray(value):ECMAScript5 提供了 Array.isArray()方法,通过挂在Array引用类型自身的方法isArray来解决跨不同全局执行环境中创建的数组判断。

使用typeof value来判断数组将得到'object'(注意不是Object类型),不仅如此,其实对象,数组,Date,函数,RegExp等,typeof均为对象,这也就是“万物皆对象”一说法的由来。

数组的转换方法中值得关注的有如下几个:
(1)toString():返回数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串。
(2)valueOf():返回该数组
(3)toLocaleString():返回结果与toString()类似,但此时为数组中的每一项执行的是toLocaleString()方法而非toString()方法。开发者可以自定义toLocaleString()方法来实现想要的结果。
(4)join():默认的toString()方法返回的是以逗号分隔的字符串,join()方法允许自定义分隔的内容如空格,斜杆等。当没有参数时,默认为逗号。

你可能感兴趣的:(【读记】JS高级程序设计-引用类型)