基础概念
数据类型
- js 的数据类型分为两种:基本类型和引用类型。
- 基本类型包含两种:第一种:undefined, null,这两个值就是两个字面量。第二种:string, number, boolean,第二种类型有对应的对象包装类型。
- 引用类型 object。有一些内置的类型如:Array, RegExp, Math, Date, Function。
作用域
- js 的作用域分为两种:全局作用域,函数作用域。
- 全局作用域只有一个:global 这也是 node.js 的全局作用域。浏览器实现了一个 window 对象,其中包含了 global,所以浏览器的全局作用域是 window。
- js 的函数可以嵌套。因此就形成了作用域链,从当前函数一直往外,最外层就是全局作用域。
- 函数就是 Funcation 的一个对象,是一个指针,函数绑定到那个变量上,函数内的 this 就指向它,例如,自定义的函数,是默认绑定在 global 上的,这时 this 就指向global。
全局对象绑定的函数
global 对象绑定了很多函数,这些函数可以直接使用:
encodeURI();
encodeURIComponent();
decodeURI();
decodeURIComponent();
isNaN();
parseInt();
parseFloat();
对象
js 语言没有类。ECMAScript 对对象定义如下:
无序属性的集合,其属性可以包含基本值、对象或者函数。
即对象就像一个散列表:无非就是一组名值对,其中值可以是数据或函数。
创建对象的演进
最简单的方式
- 创建一个 object 实例,为它添加属性和方法。
- 使用字面量创建。
// 用 Object 创建对象
var person1 = new Object();
person1.name = "vincen";
person1.age = 30;
person1.sayHello = function() {
console.log("hello" + this.name);
};
// 用字面量创建对象
var person2 = {
name : "vincen",
age : 30,
sayHello : function() {
console.log("hello" + this.name);
}
}
以上两种方式是最简单的方式。缺点:如果创建很多对象时,会产生大量的重复代码。
工厂模式
因为 js 中没有类,作为代替,用函数封装了创建对象的细节。如下例:
function createPerson(name, age) {
var o = new Object();
o.name = name;
o.age = age;
o.sayHello = function() {
console.log("hello" + this.name);
}
return o;
}
var person3 = createPerson("vincen", 30);
工厂模式解决了重复代码的问题。缺点:没有解决对象识别的问题(即怎样知道一个对象的类型)。
构造函数模式
创建自定义的构造函数,即可以把它的实例标识为一种特定类型。
function Person(name, age) {
this.name = name;
this.age = age;
this.sayHello = function() {
console.log("hello" + this.name);
}
}
var person4 = new Person("vincen", 30);
console.log(person4 instanceof Person); // true
异步编程
https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous
Promise
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise