第一章 JavaScript对象

来源:互联网 发布:win10 禁止安装软件 编辑:程序博客网 时间:2024/05/13 19:08

1.1 创建对象

JavaScript中的大多数值都是对象(基本数据类型称为原始值,但他们拥有等效包装器对象)。

JavaScript实际上是一种预包装若干原生对象构造函数的语言。这些构造函数用于生成一些特定类型值(如数字、字符串、函数、对象、数组等)的复杂对象
同样,也可以通过function()对象创建自定义的对象的构造函数。不管是否是用于创建对象的模式,产生的最终结果通常是创建一个复杂的对象。
理解对象的创建、本质、用法及其原始等价代码是本书其余部分的重点。

1.2 JavaScript构造函数构建并返回对象实例

1.3 JavaScript原生/内置对象构造函数

Number()
String()
Boolean()
Object()
Array()
Function()
Data()
RegExp()
Error()
!Math对象是一个静态对象,而不是构造函数。实际上,Math只是一个由JavaScript设置的对象命名空间,用于存储数学函数。

1.4 用户自定义/非原生对象构造函数

创建自定义构造函数只是在使用JavaScript本身在原生构造函数中所使用的相同模式。

  • 可以放弃使用 new 关键字和构造函数的概念,方法是使该函数显式的返回一个对象。必须显式地编并返回Object对象的函数:var myFuncrion = Function(){return {prop:val};.但是这样会避开原型继承的使用。

1.5 使用new操作符实例化构造函数

1.6 从构造函数创建字面量值

在一般情况下,使用字面量只是隐藏了与使用new操作符相同的基本过程。
但在原始字符串、数字和布尔值方面,字面量具有原始值的特点,而不是复杂对象的特点。

! 在针对字符串、数字和布尔值使用字面量值时,只有在该值被视为对象的情况下才会创建实际的复杂对象。换句话说,在尝试使用与构造函数有关的方法或检索属性(如var characterInfo = ‘foo’.length)之前,一直在使用原始数据类型,当这种情况发生时,JavaScript会在幕后为字面量值创建一个包装器对象(not constructor)以便该值被视为一个对象,调用方法以后,JavaScript即抛弃包装器对象,该值返回字面量类型。这就是数字、字符串和布尔值被认为是原始(或简单)数据类型原因。

1.7 原始值(或简单值)

5,”foo”,true,false,以及null和undefined等都被视为原始值,因为它们是不可细化的。

原始值是JavaScript中可用的数据/信息的最底层形式(即最简单的形式)。

! 在不使用new操作修饰符的情况下(var a = Number(10)),它返回实际复杂对象值得原始表示。

1.8 null,undefined,”strjing”,10,true和false等原始值不是对象

上面都是非常简单的值,他们不需要构造函数,也没有使用new操作符来将自己创建为JavaScript值。

原始值不是对象。原始值的特殊之处在于它们是用于表示简单值。

1.9 如何存储和复制原始值
原始值在“面值(face value)”中存储操作。原始值是真实值得复制。

如果我们复制了myString值并存储到myStringCopy变量中,当更新myString值时,myStringCopy值仍是旧myString值得副本。

1.10 原始值比较采用值比较

1.11原始值在被用作对象的时候就想对象

原始值被当作构造函数创建的一个对象来使用时,JavaScript会将其转换为一个对象,以便可以使用对象的特性或方法,而后抛弃对象性质,并将它变回到原始值。

1,12 复杂值(或组合值)
原生对象构造函数Object(),Array(),Function(),Date(),Error(),RegExp()是复杂类型。
因为它们可以包含一个或多个原始值或复杂值。
本质上,复杂值可以由很多不同类型的JavaScript对象组成。
复杂对象在其内存中大小是未知的。

! “复杂对象”这一术语在其他作品中也被表达为“符合对象”或“引用类型”。

1.13 如何存储或复制复杂值

复杂值是通过引用进行存储和操作的。实际上并不是复制对象,而是复制内存堆栈中对象的地址或引用。

若要真正地复制一个(复杂值)对象,必须要从旧的对象中提取值,并将提取的值注入新对象。

1.14 复杂对象比较采用引用比较

1.15 复杂对象具有动态属性

复杂对象支持动态对象是属性,因为我们可以定义对象,然后创建引用,再更新对象,并且所有指向该对象的变量都会“获得”更新。

1.16 typeof操作符

typeof操作符用于返回正在使用值的类型(返回值类型是string)。

原始值null的返回值是object,复杂值function()和RegExp()的返回值的function!

1.17 动态属性支持易变对象

复杂对象是由动态属性构成,这意味着JavaScript中的大多数对象都可以更新或更改,。正因为如此,可以通过增加原生对象,来改变JavaScript本身的原生预配置特性。

1.18 构造函数实例都拥有指向其构造函数的Constructor属性

对于用户自定义的构造函数表达式,如果想让constructor属性记录构造函数的实际名称,则必须给予构造函数表达式一个实际名称。(如 var Person = function Person(){};).

1.19 验证对象是否是特定构造函数的实例

原始值使用对象包装器,判断实例时,instanceof操作符将返回false。

instanceof只适用于构造函数创建返回的复杂对象和实例。

1.20 构造函数创建的实例可以拥有自己独立的属性

通过构造函数创建的对象实例只是普通对象。。

1.21 JavaScript对象和Object()对象

0 0
原创粉丝点击