Notes

节点

  1. 元素节点
  2. 文本节点
  3. 属性节点

获取元素 通过 document 访问

  1. 通过元素 ID -> getElementById 返回一个对象
  2. 通过标签名字 -> getElementsByTagName("<tag>") 返回一个数组
  3. 通过类名 -> getElementsByClassName("<class1> <class2>") 返回一个数组
    • 多个类名使用空格分开

获取、设置属性 通过 元素节点 访问

事件处理函数

给元素添加事件处理函数后,一旦事件发生,相应的 JavaScript 代码得到执行。被调用的 JavaScript 代码可以返回一个值,这个值将被传递给相应事件处理函数。(指示是否执行默认的操作)

childNodes 属性

nodeType 属性

nodeValue 属性

作用域 (部分特性)

var a = function () {
	for (var i = 0; i < 5; i++) {
		console.log("aaa");
	}
	
	// for 语句中的循环计数量 i,在循环体外,仍可访问到 i==5
	console.log(i);
}

a();

引用类型

创建 Object 实例的方法

1. new

var person = new Object();
person.name = "Monsoir";
person.age = 22;

2. 对象字面量

var person = {
	name: "Monsoir",
	age: 22
};
var person = {
	"name": "Monsoir",
	"age": 29,
	5: true // 数值属性自动转换为字符串
};

Array 类型

创建数组的基本方式

Array 构造函数

var colors = new Array();
var colors = new Array(20);
var colors = new Array("red", "blue", "green");

// 省略 new 
var colors = Array();
var colors = Array(20);
var colors = Array("red", "blue", "green");

字面量

var colors = ["red", "blue", "green"];
var colors = [];

索引

检测对象是否为数组

if (Array.isArray(value)) {
	// Do something if value is an array.
}

转换方法

toLocaleString()

toString()

valueOf()

栈方法

push()

pop()

队列方法

shift()

unshift()

重排序方法

reverse()

sort()

var values = [0, 1, 5, 10, 15];
values.sort();
alert(values); // 0, 1, 10, 15, 5
// Define a compare function
function compare(value1, value2) {
	if (value1 < value2) {
		return -1;
	} else if (value1 > value2) {
		return 1;
	} else {
		return 0;
	}
}

// Invoke the compare function
var values = [0, 1, 5, 10, 15];
values.sort(compare);
alert(values); // 0, 1, 5, 10, 15

操作方法

concat()

slice()

var colors = ["red", "green", "blue", "yellow", "purple"];
var colors2 = colors.slice(1); // green,blue,yellow,purple
var colors3 = colors.slice(1, 4); // green,blue,yellow

splice()

迭代方法

var number = [1,2,3,4,5,4,3,2,1];

var everyResult = numbers.every(function(item, index, array){
	return item > 2;
});
alert(everyResult); // false

var someResult = numbers.some(function(item, index, array){
	return item > 2;
});
alert(someResult); // true

var filterResult = numbers.filter(function(item, index, array){
	return item > 2;
});
alert(filterResult); // [3,4,5,4,3]

var mapResult = numbers.map(function(item, index, array){
	return item * 2;
});
alert(mapResult); // [2,4,6,8,10,8,6,4,2]

归并方法

var values = [1,2,3,4,5];
var sum = values.reduce(function(prev, cur, index, array){
	return prev + cur;
});
alert(sum); // 15

Function 类型

内部属性

arguments

function factorial(num) {
	if (num <= 1) {
		return 1;
	} else {
		return num * factorial(num - 1); // 函数的执行与函数名耦合了!
	}
}

function factorial(num) {
	if (num <= 1) {
		return 1;
	} else {
		return num * argument.callee(num - 1); // 使用 callee 解耦
	}
}

this

function sayColor() {
	alert(this.color);
}

sayColor(); // this 指向的环境为全局环境,即 window

var o = {color: "blue"};
o.sayColor = sayColor;
o.sayColor(); // this 指向 o 的环境

caller

function outer() {
	inner();
}

function inner() {
	alert(arguments.callee.caller);
}

outer(); // 显示 outer() 函数的源代码

基本包装类型

每读取一个基本类型值时,后台会创建一个对应的基本包装类型的对象,从而使我们能调用一些方法来操作这些数据。如:Boolean, Number, String

var s1 = "Some text"; // 基本类型
var s2 = s1.substring(2); // 后台创建一个对象,处于读取模式

// 实际上系统的操作类似于
var s1 = "Some text";
var s1 = new String("Some text"); // 隐藏操作
var s2 = s1.substring(2);
s1 = null; // 隐藏操作

1. 创建 String 类型的实例
2. 在实例上调用指定的方法
3. 销毁实例

使用 new 创建的引用类型的实例,在执行流离开当前作用域前,一直保存在内存中 自动创建的基本包装类型,存在于一行代码的执行瞬间(隐藏操作),然后立即被销毁

使用 new 调用基本包装类型的构造函数,与直接调用同名的转型函数是不一样的

var value = "25";
var number = Number(value); // 转型函数
alert(typeof number); // --> "number"

var obj = new Number(value); // 构造函数
alert(typeof obj); // --> "Object"

单体内置对象

不依赖宿主环境的对象,在程序执行前已经存在

Global 对象

eval 方法

window 对象

通过 window 对象来方法 Global 对象的属性和函数

Function.prototype.bind()

bind() 会创建一个新函数。当这个新函数被调用时,bind() 的 1st 参数将作为函数运行时的 this,之后的一序列参数,将作为函数的参数传入

用法

创建绑定函数

this.x = 9;
var module = {
	x: 81,
	getX: function() { return this.x; }
};

module.getX(); // 81

var retrieveX = module.getX;
retrieveX(); // 9,this 指向了全局作用域


var boundGetX = retrieveX.bind(module); // module 作为 retrieveX 运行时的 this
boundGetX(); // 81,x 被绑定到 module 对象中的 x