# JavaScript
JavaScript 通过原型链而不是类来支持面向对象编程(有关 ES6 类的内容参考这里
Classes
(opens new window),有关对象原型参考见此继承与原型链 (opens new window))。JavaScript同样支持函数式编程——因为它们也是对象,函数也可以被保存在变量中,并且像其他对象一样被传递。
# JS数据类型
任何编程语言都不可缺少的组成部分——“类型”,JavaScript 中的类型应该包括这些:
Number
(opens new window)(数字)String
(opens new window)(字符串)Boolean
(opens new window)(布尔)Symbol
(opens new window)(符号)(ES2015 新增)Object
(opens new window)(对象)null
(opens new window)(空)undefined
(opens new window)(未定义)
JavaScript 还有一种内置的 Error
(opens new window)(错误)类型。
# unll、undefined
- JavaScript 中的
null
(opens new window) 表示一个空值(non-value)
undefined
(opens new window) 是一个“undefined(未定义)”类型的对象,表示一个未初始化的值,也就是还没有被分配的值。
# 变量
在 JavaScript 中声明一个新变量的方法是使用关键字 let
、const
和 var
(opens new window):
- **
let
**语句声明一个块级作用域的本地变量,并且可选的将其初始化为一个值。 const
允许声明一个不可变的常量。这个常量在定义域内总是可见的。var
是最常见的声明变量的关键字。它没有其他两个关键字的种种限制。这是因为它是传统上在 JavaScript 声明变量的唯一方法。使用var
声明的变量在它所声明的整个函数都是可见的。
# 控制结构
- if ... else
- for
- switch
- ...
# 对象
JavaScript 中的对象,Object,可以简单理解成“名称-值”对。
有两种简单方法可以创建一个空对象:
var obj = new Object();
或
var obj = {};
这两种方法在语义上是相同的。第二种更方便的方法叫作“对象字面量(object literal)”法。这种也是 JSON 格式的核心语法,一般我们优先选择第二种方法。
# 数组
JavaScript 中的数组是一种特殊的对象。它的工作原理与普通对象类似(以数字为属性名,但只能通过[]
来访问),但数组还有一个特殊的属性——length
(长度)属性。这个属性的值通常比数组最大索引大 1。
创建数组的传统方法是:
var a = new Array();
a[0] = "dog";
a[1] = "cat";
a[2] = "hen";
a.length; // 3
使用数组字面量(array literal)法更加方便:
var a = ["dog", "cat", "hen"];
a.length; // 3
注意,Array.length
并不总是等于数组中元素的个数,如下所示:
var a = ["dog", "cat", "hen"];
a[100] = "fox";
a.length; // 101
记住:数组的长度是比数组最大索引值多一的数。
# 函数
学习 JavaScript 最重要的就是要理解对象和函数两个部分。最简单的函数就像下面这个这么简单:
function add(x, y) {
var total = x + y;
return total;
}
这个例子包括你需要了解的关于基本函数的所有部分。
# 闭包
闭包是 JavaScript 中最强大的抽象概念之一——但它也是最容易造成困惑的。它究竟是做什么的呢?
function makeAdder(a) {
return function(b) {
return a + b;
}
}
var add5 = makeAdder(5);
var add20 = makeAdder(20);
add5(6); // ?
add20(7); // ?
makeAdder
这个名字本身,便应该能说明函数是用来做什么的:它会用一个参数来创建一个新的“adder”函数,再用另一个参数来调用被创建的函数时,makeAdder
会将一前一后两个参数相加。
一个闭包,就是 一个函数 与其 被创建时所带有的作用域对象 的组合。闭包允许你保存状态——所以,它们可以用来代替对象。这个 StackOverflow 帖子里 (opens new window)有一些关于闭包的详细介绍。
# 学习资料
this →