JavaScript学习指南

JavaScript基于单线程事件驱动的执行模型,通过异步代码实现“不阻塞”。

本书基于ES6版本,对JavaScript的语法及应用做了一个较为全面的概览(没有深入原型链),介绍了3个重要的概念:“表达式”、“纯函数”、“函数式编程”。

我是从Python迁移过来的,在我看来——ES5版本的语法过于复杂,在语法上ES6版本同PythonRuby有了更多的共同特性。虽然在ES6版本中箭头函数、类与继承的实现只是一种语法糖,但是使用起来更为自然。块级作用域、模板字符串、解构赋值、MapSet、迭代器与生成器、Promise、代理、模块化,这些新特性使代码的书写变得更为优雅。

如果你有游戏或GUI的编写经验(比如:PygameTkinter),那么JavaScript理解起来并不难,请把你的目光聚焦在事件回调上。面对新兴的框架与语言(如:ReactGo),jQueryNode.js的优势已不再明显。

文摘

两个值严格相等的前提是它们引用了同一个对象,或者拥有相同的类型和相同的值。

Array.prototype方法:findfindIndexsomeeverymapfilterreduce会接收一个函数作为参数,会向这个函数传入——元素、下标、数组本身。

如果一个类提供了一个符号方法Symbol.iterator,且该方法返回一个具有迭代行为的对象(有next方法,且next方法返回一个具有valuedone属性的对象),那么这个类就是可迭代的。

Object.getOwnPropertyDescriptor方法返回属性描述符,try语句无法捕获回调函数中触发的异常。

DOM树(包括文档本身)中的每一个节点都是一个节点类(Node class)的实例,节点(Node)对象拥有父节点(parentNode)、子节点(childNode)、节点名(nodeName)和节点类型(nodeType)等属性。

在HTML5中,事件的传播是从事件捕获开始,然后才是事件冒泡。preventDefault可以取消事件,但被取消的事件还会继续传播,浏览器内置的事件处理器将被阻止;stopPropagationstopImmediatePropagation可以阻止事件的传播,二者的区别是:绑定到当前元素上的未调用的处理器会否被调用。

jQuery有三大主要优势:

  • 屏蔽了浏览器对DOM API实现的差异性

  • 提供了更简单的Ajax API

  • 提供了很多强大且简洁的增强功能

Node.js模块分为三大类,核心模块(core modules)、文件模块(file modules)和npm模块。