您的位置:首页 > 其它

第4章 对象

2015-08-28 16:29 183 查看

从数组到对象

通常情况下,我们不建议您在属性名上面加引号,但在以下这些情境中,引号是必须的:

如果属性名是JavaScript中的保留字之一的话。

如果属性名中包含空格或其他特殊字符的话。

如果属性名以数字开头的话。

在一些程序设计语言中,通常都会存在着两种不同的数组形式:

一般性数组,也叫做索引型数组或者枚举型数组(通常以数字为键值)。

关联型数组,也叫做哈希表(通常以字符串为键值)。

通常情况下,我们可以通过以下两种方式来访问对象的属性:

一种是中括号表示法,例如hero['occupation']。

另一种则是点号表示法,例如hero.occupation。

由于对象方法实际上只是一个函数类型属性,因此它们的访问方式与属性完全相同,即用点号表示法或中括号表示法均可。而其调用(请求)方式

也与其他函数相同,在指定的方法名后加一对括号即可。

由于JavaScript是一种动态语言,所以它允许我们随时对现存对象的属性和方法进行修改。其中自然也包括添加与删除属性。因此,我们也可以先

创建一个空对象,稍后再为它添加属性。

当我们处于某个对象方法内部时,还可以用另一种方法来访问同一对象的属性,即该对象的特殊值this。

我们还可以通过构造器函数的方式来创建对象。

当我们创建对象时,实际上同时也赋予了该对象一种特殊的属性——即构造器属性。该属性实际上是一个指向用于创建该对象的构造器函数的引用。

通过instanceof操作符,我们可以测试一个对象是不是由某个指定的构造器函数所创建的。

除了使用new操作符来调用构造器函数以外,我们也可以抛开new操作符,只用一般函数来创建对象。这就需要一个能执行某些预备工作,并以对象

为返回值的函数。

当我们拷贝某个对象或者将它传递给某个函数时,往往传递的都是该对象的引用。因此我们在引用上所做的任何改动,实际上都会影响它所引用的

原对象。

当我们对对象进行比较操作时,当且仅当两个引用指向同一个对象时为true。而如果是不同的对象,即使它们碰巧拥有相同的属性和方法,比较操作

也会返回false。

内建对象

内建对象大致上可以分为三个组:

数据封装类对象——包括Object,Array,Boolean,Number和String。这些对象代表着JavaScript中不同的数据类型,并且都拥有各自不同的

typeof返回值,以及undefined和null状态。

工具类对象——包括Math、Date、RegExp等用于提供遍历的对象。

错误类对象——包括一般性错误对象以及其他各种更特殊的错误类对象。它们可以在某些异常发生时帮助我们纠正程序工作状态。

Object是JavaScript中所有对象的父级对象,这意味着我们创建的所有对象都继承于此。为了新建一个空对象,我们既可以用对象文本标识法

也可以调用Object()构造器函数。

Array()是一个用来构建数组的内建构造器函数。

函数对象的内建构造器是Function(),我们可以将它作为创建函数的一种备选方式。

如果我们使用的是Function()构造器的话,就必须通过其参数来设定函数的参数名(通常是字符串)和函数体中的代码(也是字符串)。JavaScript

引擎自会对这些源代码进行解析,然后直接创建新函数,这样一来,就会带来eval()相似的缺点。因此我们要尽量避免使用Function()构造器

来定义函数。

如果我们需要用Function构造器来创建一个拥有许多参数的函数,需要注意一件事,即这些参数可以是一个由逗号分割而成的单列表。

与其他对象不同的是,函数对象中含有一个构造器属性,其引用的就是Function()构造器函数。

Boolean

Number()函数的用法与Boolean()基本相同,即:

当被当做一般函数时,它会试图将任何值转换为数字,这与parseInt()或parseFloat()起到的作用基本相同。

在被当做构造器函数时(即用于new操作符),它会创建一个对象。

我们可以通过String()构造器函数来新建String对象。

Math的属性都是不可修改的,因此它们都以名字大写的方式来表示自己与一般属性变量的不同。

Date()是用于创建Date对象的构造器函数,我们在用它创建对象时可以传递以下几种参数:

无参数(默认为当天的日期)。

一个用于表现日期的字符串。

分别传递日、月、时间等值。

一个timestamp值。

一个正则表达式通常由以下部分组成:

一个用于匹配的模式文本。

用0个或多个修饰符(也叫做标志)描述的匹配模式细节。

以下是一个正则表达式对象所拥有的属性:

global:如果该属性值为false(这也是默认值),相关搜索在找到第一个匹配位置时就会停止。如果需要找出所有的匹配位置,将其设置为

true即可。

ignoreCase:设置大小写相关性,默认为false。

multiline:设置是否跨行搜索的选项,默认为false。

lastIndex:搜索开始的索引位,默认值为0.

source:用于存储正则表达式匹配模式的属性。

另外,除了lastIndex外,上面所有属性在对象创建之后就都不能再被修改了。

而且,前3个属性是可以通过regex修饰符来表示的。当我们通过构造器来创建regex对象时,可以向构造器的第二参数传递下列字符中的任意

组合:

“g”代表global

“i”代表ignoreCase。

“m”代表multiline。

这些字符可以以任意顺序传递,只要它们被传递给了构造器,相应的修饰符就会被设置为true。

在String对象中,以正则表达式对象为参数的方法主要有以下这些:

match()方法:返回的是一个包含匹配内容的数组。

search()方法:返回的是第一个匹配内容所在的位置。

replace()方法:该方法能将匹配的文本替换成指定的字符串。

split()方法:能根据指定的正则表达式将目标字符串分割成若干个数组元素。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: