开发者社区> 异步社区> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

《JavaScript面向对象精要》——1.4 内建类型实例化

简介:
+关注继续查看

本节书摘来自异步社区《JavaScript面向对象精要》一书中的第1章,第1.4节,作者:【美】Nicholas C. Zakas 译者: 胡世杰 更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.4 内建类型实例化

你已经见过如何用new Object()创建和使用通用对象。Object类型只是JavaScript提供的少量内建引用类型之一。其他内建类型各有它们的特殊用途,可在任何时候被实例化。

这些内建类型如下。

Array   数组类型,以数字为索引的一组值的有序列表

Date   日期和时间类型

Error   运行期错误类型(还有一些更特别的错误的子类型)

Function 函数类型

Object  通用对象类型

RegExp  正则表达式类型

可以用new来实例化每一个内建引用类型,如下。

var items = new Array();
var now = new Date();
var error = new Error("Something bad happened.");
var func = new Function("console.log('Hi');");
var object = new Object();
var re = new RegExp("\\d+");

1.4.1 字面形式
内建引用类型有字面形式。字面形式允许你在不需要使用new操作符和构造函数显式创建对象的情况下生成引用值(你曾在本章前面见过原始类型的字面形式,包括字符串、数字、布尔、空类型和未定义)。

1.4.2 对象和数组字面形式
要用对象字面形式创建对象,可以在大括号内定义一个新对象及其属性。属性的组成包括一个标识符或字符串、一个冒号以及一个值。多个属性之间用逗号分隔。例如,

var book = {
    name: "The Principles of Object-Oriented JavaScript",
    year: 2014
};

属性名字也可以用字符串表示,特别是当你希望名字中包含空格或其他特殊字符时。

var book = {
    "name": "The Principles of Object-Oriented JavaScript",
    "year": 2014
};

本例等价于前例,仅在语法上有所区别。下例是另一种等价写法。

var book = new Object();
book.name = "The Principles of Object-Oriented JavaScript";
book.year = 2014;

上述3例的结果是一致的:一个具有两个属性的对象。写法完全取决于你。

注意:
虽然使用字面形式并没有调用new Object(),但是JavaScript引擎背后做的工作和new Object()一样,除了没有调用构造函数。其他引用类型的字面形式也是如此。
定义数组的字面形式是在中括号内用逗号区分的任意数量的值。例如,

var colors = [ "red", "blue", "green" ];
console.log(colors[0]);  // "red"

这段代码等价于:

var colors = new Array("red", "blue", "green")
console.log(colors[0]);  // "red"

1.4.3 函数字面形式
基本上都要用字面形式来定义函数。考虑到在可维护性、易读性和调试上的巨大挑战,通常不会有人使用函数的构造函数,因此很少看到用字符串表示的代码而不是实际的代码。

使用字面形式创建函数更方便也更不容易出错,如下例。

function reflect(value) {
    return value;
}

// is the same as

var reflect = new Function("value", "return value;");

这段代码定义了reflect()函数,它的作用是将任何传给它的参数返回。即使是这样一个简单的例子,使用字面形式都比构造函数的形式方便和易读。另外,用构造函数创建的函数没什么好的调试方法:JavaScript调试器认不出这些函数,它们在程序里就好像黑盒一样。

1.4.4 正则表达式字面形式
JavaScript允许用字面形式而不是使用RegExp构造函数定义正则表达式。它们看上去类似Perl中的正则表达式:模式被包含在两个“/”之间,第二个“/”后是由单字符表示的额外选项。例如,

var numbers = /\d+/g;

// is the same as

var numbers = new RegExp("\\d+", "g");

使用字面形式比较方便的一个原因是你不需要担心字符串中的转义字符。如果使用RegExp构造函数,传入模式的参数是一个字符串,你需要对任何反斜杠进行转义(这就是为什么字面形式使用“d”而构造函数使用“\”d的原因)。在JavaScript中,除非需要通过一个或多个字符串动态构造正则表达式,否则都建议使用字面形式而不是构造函数。

总之,除了函数,对内建类型没什么正确或错误的实例化方法。很多开发者喜欢字面形式,另一些则喜欢用构造函数。你可以选择能令你觉得更舒服的那种。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《JavaScript 面向对象精要》 阅读摘要(下)
高程面向对象这块内容介绍的比较浅显,个人觉得这本小书是高程的补充,看完之后觉得收获匪浅,所以做了个笔记,以备后询 Js中两种基本数据类型:原始类型(基本数据类型)和引用类型; 原始类型保存为简单数据值,引用类型则保存为对象,其本质是指向内存位置的应用。 其它编程语言用栈存储原始类型,用堆存储引用类型,而js则不同:它使用一个变量对象追踪变量的生存期。原始值被直接保存在变量对象里,而引用值则作为一个指针保存在变量对象内,该指针指向实际对象在内存中的存储位置。
41 0
《JavaScript 面向对象精要》 阅读摘要(上)
高程面向对象这块内容介绍的比较浅显,个人觉得这本小书是高程的补充,看完之后觉得收获匪浅,所以做了个笔记,以备后询 原始类型和引用类型Js中两种基本数据类型:原始类型(基本数据类型)和引用类型; 原始类型保存为简单数据值,引用类型则保存为对象,其本质是指向内存位置的应用。 其它编程语言用栈存储原始类型,用堆存储引用类型,而js则不同:它使用一个变量对象追踪变量的生存期。原始值被直接保存在变量对象里,而引用值则作为一个指针保存在变量对象内,该指针指向实际对象在内存中的存储位置。
51 0
《JavaScript面向对象精要》——导读
JavaScript拥有上述全部特性,因为语言本身没有类的概念,所以某些特性可能不是以你所期望的方式实现的。乍一看,一个JavaScript程序可能像是一个用C来编写的面向过程的程序。如果写一个函数并传递一些参数,就有了一个看上去没有对象也可工作的脚本。
1142 0
《JavaScript面向对象精要》——导读
大多数开发者将面向对象的编程联想为那些在学校中学到的基于类的语言,比如C++和Java。在用这些语言完成任务之前,必须先创建类,哪怕只是写一个简单的命令行程序。目前业界常用的设计模式也强调了基于类的概念。
1385 0
《JavaScript面向对象精要》——1.3 引用类型
因为引用类型不在变量中直接保存对象,所以本例中的object变量实际上并不包含对象的实例,而是一个指向内存中实际对象所在位置的指针(或者说引用)。这是对象和原始值之间的一个基本差别,原始值是直接保存在变量中的。
1303 0
css3结合JavaScript实现翻页幻灯片效果
CSS3+JavaScript实现翻页幻灯片效果
10 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
JavaScript 语言在引擎级别的执行过程
立即下载
Javascript异步编程
立即下载
Javascript中的对象
立即下载