出版社: 电子工业出版社
副标题: 修订版
原作名: JavaScript:The Good Parts
译者: 赵泽欣 / 鄢学鹍
出版年: 2012-9-1
页数: 155
定价: 49.00元
装帧: 平装
丛书: O'Reilly动物系列(中译本)
ISBN: 9787121177408
内容简介 · · · · · ·
JavaScript 曾是“世界上最被误解的语言”,因为它担负太多的特性,包括糟糕的交互和失败的设计,但随着Ajax 的到来,JavaScript“从最受误解的编程语言演变为最流行的语言”,这除了幸运之外,也证明了它其实是一门优秀的语言。Douglas Crockford 在本书中剥开了JavaScript 沾污的外衣,抽离出一个具有更好可靠性、可读性和可维护性的JavaScript 子集,让你看到一门优雅的、轻量级的和非常富有表现力的语言。作者从语法、对象、函数、继承、数组、正则表达式、方法、样式和优美的特性这9 个方面来呈现这门语言真正的精华部分,通过它们完全可以构建出优雅高效的代码。作者还通过附录列出了这门语言的毒瘤和糟粕部分,且告诉你如何避免它们。最后还介绍了JSLint,通过它的检验,能有效地保障我们的代码品质。
这是一本介绍 JavaSc...
JavaScript 曾是“世界上最被误解的语言”,因为它担负太多的特性,包括糟糕的交互和失败的设计,但随着Ajax 的到来,JavaScript“从最受误解的编程语言演变为最流行的语言”,这除了幸运之外,也证明了它其实是一门优秀的语言。Douglas Crockford 在本书中剥开了JavaScript 沾污的外衣,抽离出一个具有更好可靠性、可读性和可维护性的JavaScript 子集,让你看到一门优雅的、轻量级的和非常富有表现力的语言。作者从语法、对象、函数、继承、数组、正则表达式、方法、样式和优美的特性这9 个方面来呈现这门语言真正的精华部分,通过它们完全可以构建出优雅高效的代码。作者还通过附录列出了这门语言的毒瘤和糟粕部分,且告诉你如何避免它们。最后还介绍了JSLint,通过它的检验,能有效地保障我们的代码品质。
这是一本介绍 JavaScript 语言本质的权威书籍,值得任何正在或准备从事JavaScript 开发的人阅读,并且需要反复阅读。学习、理解、实践大师的思想,我们才可能站在巨人的肩上,才有机会超越大师,这本书就是开始。
作者简介 · · · · · ·
Douglas Crockford是一名来自Yahoo!的资深JavaScript架构师,以创造和维护JSON (JavaScriptObject Notation) 格式而为大家所熟知。他定期在各类会议上发表有关高级JavaScript的主题演讲。
目录 · · · · · ·
第1 章 精华.................................................................................................................. 1
为什么要使用JavaScript .......................................................................................................2
分析JavaScript......................................................................................................................2
一个简单的试验场.................................................................................................................4
第2 章 语法.................................................................................................................. 5
· · · · · · (更多)
第1 章 精华.................................................................................................................. 1
为什么要使用JavaScript .......................................................................................................2
分析JavaScript......................................................................................................................2
一个简单的试验场.................................................................................................................4
第2 章 语法.................................................................................................................. 5
空白.......................................................................................................................................5
标识符...................................................................................................................................6
数字.......................................................................................................................................7
字符串...................................................................................................................................8
语句.....................................................................................................................................10
表达式.................................................................................................................................15
字面量.................................................................................................................................18
函数.....................................................................................................................................19
第3 章 对象................................................................................................................ 20
对象字面量..........................................................................................................................20
检索.....................................................................................................................................21
更新.....................................................................................................................................22
引用.....................................................................................................................................22
原型.....................................................................................................................................22
反射.....................................................................................................................................23
枚举.....................................................................................................................................24
删除.....................................................................................................................................24
减少全局变量污染...............................................................................................................25
第4 章 函数................................................................................................................ 26
函数对象..............................................................................................................................26
函数字面量..........................................................................................................................27
调用.....................................................................................................................................27
参数.....................................................................................................................................30
返回.....................................................................................................................................31
异常.....................................................................................................................................31
扩充类型的功能...................................................................................................................32
递归.....................................................................................................................................33
作用域.................................................................................................................................36
闭包.....................................................................................................................................36
回调.....................................................................................................................................39
模块.....................................................................................................................................40
级联.....................................................................................................................................42
柯里化.................................................................................................................................43
记忆.....................................................................................................................................43
第5 章 继承................................................................................................................. 46
伪类.....................................................................................................................................46
对象说明符..........................................................................................................................49
原型.....................................................................................................................................50
函数化.................................................................................................................................51
部件.....................................................................................................................................55
第6 章 数组................................................................................................................. 57
数组字面量..........................................................................................................................57
长度.....................................................................................................................................58
删除.....................................................................................................................................59
枚举.....................................................................................................................................59
容易混淆的地方...................................................................................................................60
方法.....................................................................................................................................60
指定初始值..........................................................................................................................62
第7 章 正则表达式..................................................................................................... 64
一个例子..............................................................................................................................65
结构.....................................................................................................................................69
元素.....................................................................................................................................71
第8 章 方法................................................................................................................. 77
Array ....................................................................................................................................77
Function ...............................................................................................................................83
Number ................................................................................................................................84
Object...................................................................................................................................85
RegExp ................................................................................................................................86
String....................................................................................................................................88
第9 章 代码风格........................................................................................................ 94
第10 章 优美的特性................................................................................................... 98
附录A 毒瘤............................................................................................................... 101
附录B 糟粕............................................................................................................... 109
附录C JSLint ............................................................................................................. 115
附录D 语法图........................................................................................................... 127
附录E JSON............................................................................................................... 138
索引.............................................................................................................................. 149
· · · · · · (收起)
"JavaScript语言精粹"试读 · · · · · ·
原文摘录 · · · · · · ( 全部 )
-
We all find the good parts in the products that we use. We value simplicity, and when simplicity isn’t offered to us, we make it ourselves. My microwave oven has tons of features, but the only ones I use are cook and the clock. And setting the clock is a struggle. We cope with the complexity of feature-driven design by finding and sticking with the good parts. It would be nice if products and programming languages were designed to have only good parts. (查看原文) —— 引自第100页 -
Because of a design error, arguments is not really an array. It is an array-like object. arguments has a length property, but it lacks all of the array methods. (查看原文) —— 引自第31页
> 全部原文摘录
丛书信息
喜欢读"JavaScript语言精粹"的人也喜欢的电子书 · · · · · ·
喜欢读"JavaScript语言精粹"的人也喜欢 · · · · · ·
JavaScript语言精粹的话题 · · · · · · ( 全部 条 )



JavaScript语言精粹的书评 · · · · · · ( 全部 45 条 )




有些入门书是有其他程序经验的程序员的入门书,这本就是
> 更多书评 45篇
-
lastmayday (鸡排饭加个蛋)
对象数组排序的比较函数: var by = function (name) { return function (o, p) { var a, b; if (typeof o === 'object' && typeof p === 'object' && o && p) { a = o[name]; b = p[name]; if (a === b) { return 0; } if (typeof a === typeof b) { return a < b ? -1 : 1; } return typeof a < typeof b ? -1 : 1; } else { throw { name: 'Error', message: 'Expected an object when sorting...2015-12-01 15:43:18
对象数组排序的比较函数:
var by = function (name) { return function (o, p) { var a, b; if (typeof o === 'object' && typeof p === 'object' && o && p) { a = o[name]; b = p[name]; if (a === b) { return 0; } if (typeof a === typeof b) { return a < b ? -1 : 1; } return typeof a < typeof b ? -1 : 1; } else { throw { name: 'Error', message: 'Expected an object when sorting by ' + name }; } }; };
回应 2015-12-01 15:43:18 -
lastmayday (鸡排饭加个蛋)
`memoizer`函数获取初始的`memo`数组和`formula`函数, 用来作缓存 var memoizer = function (memo, formula) { var recur = function (n) { var result = memo[n]; if (typeof result !== 'number') { result = formula (recur, n); memo[n] = result; } return result; }; return recur; };2015-12-01 11:41:55
-
蛋炒饭加俩蛋 (人丑读书ing..)
译者序 写了一本很糟糕的书只是犯错而已,而把一本好书翻译得很糟糕则是犯罪。--吉尔伯特海特 早期的商业原因和规范缺欠给JavaScript 这门语言蒙上了阴影;Copy+Paste式滥用也让JavaScript显得廉价不堪;更糟糕的是,还有大量不负责任的书籍把蹩脚的用例奉为正统。 “取其精华,去其糟粕”本就是前人告诉我们的学习态度与方法,对日新月异的IT领域来说更是该如此。当我们面对这些层出不穷的新技术新理念时,不要匆忙地照单全收...2014-01-19 09:31:18
译者序 写了一本很糟糕的书只是犯错而已,而把一本好书翻译得很糟糕则是犯罪。--吉尔伯特海特 早期的商业原因和规范缺欠给JavaScript 这门语言蒙上了阴影;Copy+Paste式滥用也让JavaScript显得廉价不堪;更糟糕的是,还有大量不负责任的书籍把蹩脚的用例奉为正统。 “取其精华,去其糟粕”本就是前人告诉我们的学习态度与方法,对日新月异的IT领域来说更是该如此。当我们面对这些层出不穷的新技术新理念时,不要匆忙地照单全收或全盘否定。找到最适合工作或自己最感兴趣的技术,并用科学的方法潜下心来坚持学习和研究,我们同样也可以成为大师! //文章链接: http://javascript.crockford.com/
回应 2014-01-19 09:31:18 -
蛋炒饭加俩蛋 (人丑读书ing..)
“为什么我要使用JavaScript?” 1、现在你没的选择。JavaScript 是唯一一门跨浏览器、跨平台的语言,而且最近的Nodejs的崛起 2、JavaScript真的很优秀。它既轻量级又富有表现力。函数式编程是一件很有趣的事。这门语言的精华足以弥补它的糟粕。 任何编程语言都有精华和糟粕,我们用坏材料是做不出好东西的,所以我们要取其精华、去其糟粕,定义自己的子集,这样基于精华的部分去编写更好的程序,使之更可靠、更易读、更易于维...2014-01-19 09:50:45
“为什么我要使用JavaScript?” 1、现在你没的选择。JavaScript 是唯一一门跨浏览器、跨平台的语言,而且最近的Nodejs的崛起 2、JavaScript真的很优秀。它既轻量级又富有表现力。函数式编程是一件很有趣的事。这门语言的精华足以弥补它的糟粕。 任何编程语言都有精华和糟粕,我们用坏材料是做不出好东西的,所以我们要取其精华、去其糟粕,定义自己的子集,这样基于精华的部分去编写更好的程序,使之更可靠、更易读、更易于维护。 优秀的想法 函数、弱类型、动态对象和富有表现力的对象字面量表示法。 1、函数是(主要)基于词法作用域(lexical scoping )译注3的顶级对象。JavaScript是第一个成为主流的Lambda语言。它是披着C 外衣的Lisp 。 2、JavaScript 是一门弱类型的语言,编译器检测不出类型错误。但是弱类型是自由的。无须建立复杂的类层次,也不用疲于应付类型系统以得到想要的行为。 3、JavaScript 有非常强大的对象字面量表示法。(表现方式为JSON(JavaScript Object Notation)传送门http://json.org/json-zh.html ) 4、原型继承:JavaScript 有一个无类型的(class-free )对象系统,在这个系统中,对象直接从其他对象继承属性。 糟糕的想法 基于全局变量的编程模型 JavaScript 依赖于全局变量来进行连接。所有编译单元的所有顶级变量被撮合到一个被称为全局对象(the global object )的公共命名空间中。因为全局变量是魔鬼,但它们在JavaScript 中却是基础。 资源 ECMA-3 JScript标准:http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
回应 2014-01-19 09:50:45 -
蛋炒饭加俩蛋 (人丑读书ing..)
语法图(Syntax diagrams )又叫铁路图(railroad diagrams)是描述形式文法的一种方式。它是巴科斯范式或扩展巴科斯范式的图形化表示。最早使用语法图的书包括Niklaus Wirth写的“Pascal User Manual”(语法图开始于47页)和the Burroughs CANDE manual。在编译领域,像BNF和它的变体这样的文字式表示法都是首选的。BNF能很好的被编译器作者和编译器理解,但是不能很好的被这些语言的大部分用户理解。铁路图能更容易被大多数...2014-01-19 10:23:12
语法图(Syntax diagrams )又叫铁路图(railroad diagrams)是描述形式文法的一种方式。它是巴科斯范式或扩展巴科斯范式的图形化表示。最早使用语法图的书包括Niklaus Wirth写的“Pascal User Manual”(语法图开始于47页)和the Burroughs CANDE manual。在编译领域,像BNF和它的变体这样的文字式表示法都是首选的。BNF能很好的被编译器作者和编译器理解,但是不能很好的被这些语言的大部分用户理解。铁路图能更容易被大多数人理解。数据交换格式JSON之所以流行的部分原因就是它用铁路图来表示。 http://en.wikipedia.org/wiki/Syntax_diagram 规则: 1.从左边界开始沿着轨道去到右边界。 2.沿途,你将在圆框中遇到的是字面量,在方块中遇到的是规则或者描述。 3.任何沿着轨道能走通的序列都是合法的。 4.任何不能沿着轨道走通的序列都是非法的。 5.每个末端只有一个竖条的铁路图允许在任何一对标记中间插入空白。而在末端有两个竖条的铁路图是不允许的。 两种注释格式 1、用/**/包围的块注释 2、以//开头的行注释(推荐)
/* var rm_a = /a*/.match(s); */
标识符用于语句、变量、参数、属性名、运算符和标记。 已一个字母开头,其后加上一个或多个字母、数字或下划线。 (也可以下划线“_” 美元符号“$” 开头 不推荐) Javascript保留字(Javascript Reserved Words) break delete function return typeof case do if switch var catch else in this void continue false instanceof throw while debugger finally new true with default for null try Javascript未来保留字(Javascript Future Reserved Words) abstract double goto native static boolean enum implements package super byte export import private synchronized char extends int protected throws class final interface public transient const float long short volatile 还有undefined NaN Infinity等 数字 Numbers 只有一个数字类型,内部被表示为64位浮点数,没有分离出整数类型,所以1和1.0是相同。也避免了短整型的溢出问题。 NaN 是一个数值,表示一个不能产生正常结果的运算结果。NaN不等于任何值,包括自己。 使用函数isNaN(Number)检测。 字符串 String 字符串字面量可以被包在一对单引号或双引号中,其中包含0个或多个字符。Javascript字符是16位(那时Unicode是16位的)。 Javascript没有字符类型,表示一个字符只需创建仅包含一个字符的字符串即可。 blackslash "\"反斜线 slash "/"斜线 length属性:字符串的长度 字符串是不可变的。两个包含着完全相同的字符且字符顺序也相同的字符串是被认为相同的。
'c'+'a'+'t'==='cat'
语句 statements 一个编译单元包含一组可执行的语句。在web浏览器中,每个<script>标签都提供一个被编译且立即执行的编译单元。因为缺少链接器, JavaScript把它们一起抛入一个公 共的全局名字空间中。 JavaScript可以通过条件语句(if和switch)、循环语句(while、for和do)、强制跳转语句(break、return和throw)和函数调用来改变这个执行序列。 代码块是包在一对花括号中的一组语句。JavaScript中的代码块不会创建一个新的作用域,因此变量应该被定义在函数的顶端,而不是在代码块中. 下列值被当作假(falsy) false、 null 、undefined 、空字符串'' 、数字0 、 数字NaN for语句两种形式。 1、由三个可选从句控制:初始化从句(initialization)、条件从句(condition)和增量从句(increment) 2、另一种形式(被称为for in语句)会枚举一个对象的所有属性名(或键名)。通过检测object.hasOwnProperty(variable)来确定这个属性名就是该对象的成员,还是从其原型链里找到的。
for (myvar in obj) { if (obj.hasOwnProperty(myvar)) { ... } }
return 语句若没有指定返回表达式则返回undefined. 表达式 Experssions 最简单的表达式是字面证值(比如字符串或数字〉、变量、内置的值(true、false, null,undefined, NaN和Infinity)、以new开头的调用表达式、以delete开头的属性提取表达式、包在圆括号中的表达式、以一个前置运算符作为前导的表达式,或者表达式后面跟着: • 一个中置运算符与另一个表达式, • 三元运算符?后面跟着另一个表达式,然后接一个:,再然后接第3个表达式 • 一个函数调用 • 一个属性提取表达式。 --------------------------------------- 运算符优先级 (由高到低) . [] () 属性存取及函数调用 delete new typeof + - ! 一元运算符 * / % 乘法、除法、求余 + - 加法/连接、减法 >= <= > < 不等式运算符 === !== 等式运算符 && 逻辑与 || 逻辑或 ?: 三元 --------------------------------------- 字面量 Literals 对象字面量是一种方便地按指定规格创建新对象的表示方法。属性名可以是标识符或字符串。这些名字被当作字面量名而不是变量名来对待,所以对象的属性名在编译时才能知道。属性的值就是表达式。
回应 2014-01-19 10:23:12
-
lastmayday (鸡排饭加个蛋)
对象数组排序的比较函数: var by = function (name) { return function (o, p) { var a, b; if (typeof o === 'object' && typeof p === 'object' && o && p) { a = o[name]; b = p[name]; if (a === b) { return 0; } if (typeof a === typeof b) { return a < b ? -1 : 1; } return typeof a < typeof b ? -1 : 1; } else { throw { name: 'Error', message: 'Expected an object when sorting...2015-12-01 15:43:18
对象数组排序的比较函数:
var by = function (name) { return function (o, p) { var a, b; if (typeof o === 'object' && typeof p === 'object' && o && p) { a = o[name]; b = p[name]; if (a === b) { return 0; } if (typeof a === typeof b) { return a < b ? -1 : 1; } return typeof a < typeof b ? -1 : 1; } else { throw { name: 'Error', message: 'Expected an object when sorting by ' + name }; } }; };
回应 2015-12-01 15:43:18 -
lastmayday (鸡排饭加个蛋)
`memoizer`函数获取初始的`memo`数组和`formula`函数, 用来作缓存 var memoizer = function (memo, formula) { var recur = function (n) { var result = memo[n]; if (typeof result !== 'number') { result = formula (recur, n); memo[n] = result; } return result; }; return recur; };2015-12-01 11:41:55
-
Hidfeel (Never being.. ever be)
if (typeof Object.beget !== 'function') { Object.create = function (o) { var F = function () {}; F.prototype = o; return new F(); } };2014-04-23 18:37:23
论坛 · · · · · ·
请问 这和之前的版本有何区别? | 来自令狐葱 | 1 回应 | 2013-07-04 14:38:47 |
这本书的其他版本 · · · · · · ( 全部4 )
-
电子工业出版社 (2009)9.1分 2162人读过
-
Yahoo Press (2008)9.1分 637人读过
-
东南大学出版社 (2009)9.1分 127人读过
在哪儿借这本书 · · · · · ·
以下书单推荐 · · · · · · ( 全部 )
- Web前端技术|2015年以前 (3fun4)
- 豆瓣9分以上计算机图书 (晚安,本杰明)
- 从码熊到码雄之路 (不在服务区)
- 其他编程语言 (养鸭专业户)
- Web前端开发读书单 (冻豆腐)
谁读这本书?
二手市场
订阅关于JavaScript语言精粹的评论:
feed: rss 2.0
0 有用 Slertness 2014-10-11 18:04:03
js书里偏爱这本
0 有用 聆空 2019-03-01 21:02:49
传说中的书越读越薄大概如此。本身针对js语法做一个大纲式的回顾,取其精华去其糟粕。可惜语言是ES3,稍有些过时。不晓得有没有第二版。
0 有用 Feynming 2017-01-18 20:45:47
还可以
0 有用 萬軍 2015-01-11 17:48:02
短小精悍的小册子
0 有用 ejacky 2015-09-09 10:27:57
很不适合初学者
0 有用 Shire 2022-03-28 23:29:44
155页的精华书
0 有用 ShnuUIiis 2022-03-02 22:37:46
想再看一遍
0 有用 Xeraphinite 2022-01-04 14:06:10
总之是es6之前语法的最佳书籍
0 有用 feemo 2021-12-27 00:13:33
我不是很能接受用连线表示代码语法的方式,容易陷入一些细节
0 有用 苏晓 2021-12-25 18:55:19
书是薄薄的一本,书价略贵,内容不是很适合初学者,需要一些积累才能看懂。