《JavaScript语言精粹》 学习笔记

换了几天将这本不厚的JavaScript介绍看了一遍,Douglas Crockford确实是js的大师,阅读目的主要是了解JavaScript的设计思想和一些主要的特性,事实看来不虚词读。
本文贴一些在阅读的时候记下的比较重要的JS语法和设计思想,闲暇时看一看可能会帮助自己更好地理解自己正在写的代码。原书中最后几章介绍的是js的一些不好的特性和需要避免使用的一些语法,我觉得也有必要读一读,虽然书名叫做js语言精粹。

JavaScript一些好的想法: 函数、弱类型、动态对象和一个富有表现力的对象字面量表示法、

* JS的函数是基于词法作用域的顶级对象
* 弱类型是自由的,无需简历复杂的类层次;
* 强大的对象字面量表示法,通过列出对象的组成部分,它们就能简单地被创建出来。   (JSON的灵感
* 原型继承,JS有一个class-free的对象系统,对象直接从其他对象继承属性

一个糟糕的选择:依赖于全局变量进行连接,所有便一单元的所有顶级变量被撮合到一个被称为全局对象的公共命名空间中。


Chapter 2 语法:

  • JS只有一个单一的数字类型,内部表示为一个16位的浮点数。

  • JS所有字符都是16位的,Unicode的字符集,没有字符类型,且字符串是不可变的。
    不像许多其他语言,JS代码块不会创建一个新的作用域,因此变量应该被定义在函数顶端,而不是在代码块中。

  • 假:false; null; undefined; 空字符串; 数字0; 数字 NaN

  • 字面量:是一种方便指定新对象的表示法,属性名可以使标识符或字符串,对象的属性在编译时才知道。

Chapter 3 对象:

  • JS中的对象是可变的键控集合,一切都是对象。

  • 对象通过引用传递,永远不会被拷贝。

  • 每个对象都被连接到一个原型对象,Object.prototype这个标准的对象。
  • 反射: 检查对象并确定对象有什么属性;
    typeof flight.number // 会检查原型链
    hasOwnProperty // 不会检查原型链

减少全局对象污染:创建唯一的一个全局变量,把多个全局变量都整理在一个名称空间下。


Chapter 4 函数:

  • 函数调用:

除了声明时定义的形式参数,每个函数接收两个附加参数 this 和 arguments。

JS中有四种调用模式:方法调用 构造器调用 函数调用 和 apply调用。 四种方式初始化this上存在差异。

*实际传递的参数个数与形式参数个数不匹配时不会产生运行时错误!! 传递参数时也没有类型检查。

  • 方法调用:

    当一个函数被保存为对象的一个属性时,我们称之为方法。 方法调用时,this被绑定到该对象。 即用. 或[] 调用时。 通过this可以获得所属对象上下文的方法称之为 公共方法。
    var myObject = {
    value: 0;
    increment: function (inc){
    this.value += typeof inc === ‘number’ ? inc : 1;
    }
    };

  • 函数调用:

    函数并非一个对象的属性时,this被绑定到全局对象。
    var sum = add(3,4);

  • 构造器调用:

var Quo = function (string){
this.status = string;
};
//构造一个新的Quo实例
var myQuo = new Quo(“confused”);

  • Apply调用:

apply方法让我们构建一个参数数组并用其去调用函数,它也允许我们选择this的值。 apply接收两个参数,第一个被绑定给this,第二个是参数数组。

例:
var array = [3,4];
var sum = add.apply{null,array};

var statusObject = {
status: “A-ok”
}

//statusObject 并没有继承自Quo.prototype, 但我们可以再statusObject上调用get_status方法,尽管它没有一个名为get_status的方法。

var status = Quo.prototype.get_status.apply(statusObject);

* 函数被调用时会有免费赠送一个arguments数组,这使得编写一个无需指定参数个数的函数成为可能。 例如多个数相加,但不是特别有用,有其他方法实现。


给类型添加方法:
Function.prototype.method = function (name,func){
if(!this.prototype[name]){
this.prototype[name] = func;
}
};

作用域: 内部函数可以访问定义它们的外部函数的参数和变量!
闭包: 在一个function的内部声明一个function就创造了一个闭包,闭包可以理解为一个指向内部函数的指针和一个指向函数上下文的指针。

理解JS:

函数是头等对象: 函数是有词法作用域的闭包。

基于原型继承的动态对象: 对象是无类别的,我们可以通过普通的赋值给任何对象增加一个新的成员元素。

对象字面量和数组字面量:


快捷键

  • 加粗 Ctrl + B
  • 斜体 Ctrl + I
  • 引用 Ctrl + Q
  • 插入链接 Ctrl + L
  • 插入代码 Ctrl + K
  • 插入图片 Ctrl + G
  • 提升标题 Ctrl + H
  • 有序列表 Ctrl + O
  • 无序列表 Ctrl + U
  • 横线 Ctrl + R
  • 撤销 Ctrl + Z
  • 重做 Ctrl + Y

Markdown及扩展

Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的HTML页面。 —— [ 维基百科 ]

使用简单的符号标识不同的标题,将某些文字标记为粗体或者斜体,创建一个链接等,详细语法参考帮助?。

本编辑器支持 Markdown Extra ,  扩展了很多好用的功能。具体请参考Github.

表格

Markdown Extra 表格语法:

项目价格
Computer$1600
Phone$12
Pipe$1

可以使用冒号来定义对齐方式:

项目价格数量
Computer1600 元5
Phone12 元12
Pipe1 元234

定义列表

Markdown Extra 定义列表语法: 项目1 项目2
定义 A
定义 B
项目3
定义 C

定义 D

定义D内容

代码块

代码块语法遵循标准markdown代码,例如:

@requires_authorization
def somefunc(param1='', param2=0):
    '''A docstring'''
    if param1 > param2: # interesting
        print 'Greater'
    return (param2 - param1 + 1) or None
class SomeClass:
    pass
>>> message = '''interpreter
... prompt'''

脚注

生成一个脚注1.

目录

[TOC]来生成目录:

数学公式

使用MathJax渲染LaTex 数学公式,详见math.stackexchange.com.

  • 行内公式,数学公式为: Γ(n)=(n1)!nN
  • 块级公式:

x=b±b24ac2a

更多LaTex语法请参考 这儿.

UML 图:

可以渲染序列图:

Created with Raphaël 2.1.0 张三 张三 李四 李四 嘿,小四儿, 写博客了没? 李四愣了一下,说: 忙得吐血,哪有时间写。

或者流程图:

Created with Raphaël 2.1.0 开始 我的操作 确认? 结束 yes no
  • 关于 序列图 语法,参考 这儿,
  • 关于 流程图 语法,参考 这儿.

离线写博客

即使用户在没有网络的情况下,也可以通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入write.blog.csdn.net/mdeditor即可。Markdown编辑器使用浏览器离线存储将内容保存在本地。

用户写博客的过程中,内容实时保存在浏览器缓存中,在用户关闭浏览器或者其它异常情况下,内容不会丢失。用户再次打开浏览器时,会显示上次用户正在编辑的没有发表的内容。

博客发表后,本地缓存将被删除。 

用户可以选择 把正在写的博客保存到服务器草稿箱,即使换浏览器或者清除缓存,内容也不会丢失。

注意:虽然浏览器存储大部分时候都比较可靠,但为了您的数据安全,在联网后,请务必及时发表或者保存到服务器草稿箱

浏览器兼容

  1. 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome。
  2. IE9以下不支持
  3. IE9,10,11存在以下问题
    1. 不支持离线功能
    2. IE9不支持文件导入导出
    3. IE10不支持拖拽文件导入


  1. 这里是 脚注内容.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: "JavaScript语言精粹"是一本由Douglas Crockford撰写的著名图书,是许多JavaScript开发者学习与掌握该语言不可或缺的重要资源。 这本书主要关注于JavaScript的核心概念和最佳实践,帮助开发者摆脱一些语言的怪异之处和陷阱,使其能够更加高效地编写可维护和可扩展的代码。 "JavaScript语言精粹"一书将JavaScript的精华提炼为19个章节,每一章节都深入浅出地介绍了一个关键概念,包括函数、对象、数组、代码风格、错误处理等。作者以清晰简洁的语言解释了这些概念的背后原理,并给出了许多实用的代码示例。 这本书不仅适合JavaScript初学者,对于有一定经验的开发者来说也是一本不可多得的参考书。通过阅读它,开发者可以拓宽对JavaScript的理解和认识,提高代码质量和效率。 除了对基础概念的详细介绍外,"JavaScript语言精粹"还包含了一些进阶话题,如闭包、原型链、模块化等,帮助开发者进一步提升其JavaScript编程能力。 总之,"JavaScript语言精粹"是一本权威而实用的JavaScript学习资源,对于想要深入理解和掌握该语言的人来说是极为重要的一本书籍。无论你是初学者还是有经验的开发者,这本书都能帮助你写出更优雅、可读性更高的JavaScript代码。 ### 回答2: 《JavaScript语言精粹》是一本由Douglas Crockford撰写的权威指南,它介绍了JavaScript语言中最重要和最有用的部分。该书通过简洁而清晰的语言讲解了JavaScript的核心概念和特性,为开发者提供了深入理解和运用JavaScript的方法和技巧。 这本书以独特的方式展现了JavaScript的精华,将复杂的语法和概念简化成易于理解和运用的形式。Crockford首先介绍了JavaScript中的基本语法和数据类型,然后深入讲解了函数、对象、原型、闭包等重要概念。他通过具体的示例和练习,引导读者掌握JavaScript中的核心概念和编程技巧。 《JavaScript语言精粹》还包含了对常见错误和陷阱的警示,帮助读者避免在编写JavaScript代码时常见的问题。此外,该书还提供了一些最佳实践和编码规范,帮助开发者写出高质量、可维护的JavaScript代码。 与其他JavaScript教程不同,《JavaScript语言精粹》不仅关注如何正确地使用JavaScript,还强调了一些可以帮助开发者避免错误和提高代码质量的技巧和原则。这使得这本书成为了一本适合初学者和有经验的开发者阅读的权威指南。 总之,《JavaScript语言精粹》是一本深入而全面地介绍JavaScript语言的书籍。无论你是初学者还是有经验的开发者,阅读这本书都可以帮助你建立起对JavaScript的深入理解,并提高你的JavaScript编程技巧。 ### 回答3: 《JavaScript语言精粹》是一本由Douglas Crockford所著的程序设计相关书籍,它主要介绍了JavaScript语言的核心概念和重要知识点。这本书在程序设计领域有着很高的声誉,被许多程序员视为JavaScript编程的经典参考书。 该书的目的是帮助读者深入理解JavaScript语言的精华部分,将复杂的语法和特性解释得简单易懂。它详细介绍了JavaScript的基本数据类型、函数、对象、原型链以及闭包等重要概念,并提供了一些实用的编程技巧和最佳实践。读者通过学习这些内容,可以更好地理解JavaScript的设计哲学和编程范式。 《JavaScript语言精粹》的内容不仅限于语法的讲解,还包括了一些关于代码风格、错误处理和性能优化等方面的建议。它强调代码的可读性、可维护性和可扩展性,帮助读者编写出高质量的JavaScript代码。 这本书的另一个亮点是作者Douglas Crockford的独特见解和深入思考。他不仅仅是介绍了JavaScript的特性,还对其设计和演变进行了深入的分析和比较。他提出了一些有关编程规范和标准化的建议,为读者在实际开发中避免一些常见的陷阱和错误提供了宝贵的经验。 总之,《JavaScript语言精粹》是一本经典的JavaScript编程参考书籍,适合有一定编程基础的读者阅读。它能够帮助读者深入理解JavaScript的核心概念和设计原理,提高编程技巧,写出高质量的代码。无论是初学者还是有经验的开发者,都会从这本书中获益匪浅。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值