數(shù)據(jù)類型
5種簡單數(shù)據(jù)類型(基本數(shù)據(jù)類型):Undefined、Null、Boolean、Number、String
1種復(fù)雜數(shù)據(jù)類型:Object
變量、作用域和內(nèi)存問題
函數(shù)的參數(shù)是按值傳遞的。*可以把 ECMAScript函數(shù)的參數(shù)想象成局部變量。 *
例1:
function addTen(num) {
num += 10;
return num; }
var count = 20;
var result = addTen(count);
alert(count); //20,沒有變化
alert(result); //30
例2:
function setName(obj) {
obj.name = "Nicholas"; }
var person = new Object();
setName(person);
alert(person.name); //"Nicholas"
例3:
function setName(obj) {
obj.name = "Nicholas";
obj = new Object();
obj.name = "Greg"; }
var person = new Object();
setName(person);
alert(person.name); //"Nicholas"
檢測類型
**typeof **
var n == null;
alert(typeof n); //object
instanceof
alert(colors instanceof Array); // 變量 colors 是 Array 嗎?```
##延長作用域鏈
function buildUrl() {
var qs = "?debug=true";
with(location){
var url = href + qs;//實(shí)際引用了location.href
}
return url;
}```
沒有塊級作用域
for (var i=0; i < 10; i++){
doSomething(i); }
alert(i); //10
引用類型
Array類型
toLocaleString()、toString()和 valueOf()方法
join()
棧方法
push()、pop()
隊(duì)列方法
push()、shift()//取出第一項(xiàng)
unshift()//增加第一項(xiàng)、pop() 反向
重排序
reverse()//反序、sort()//值的升序
比較:
funtion compare(val1,val2){
return val2 - val1;
}
var values = [0, 1, 5, 10, 15];
values.sort(compare);
alert(values); // 15,10,5,1,0
操作方法
splice()
- 刪除:可以刪除任意數(shù)量的項(xiàng),只需指定 2 個(gè)參數(shù):要?jiǎng)h除的第一項(xiàng)的位置和要?jiǎng)h除的項(xiàng)數(shù)。 例如,splice(0,2)會(huì)刪除數(shù)組中的前兩項(xiàng)。
- 插入:可以向指定位置插入任意數(shù)量的項(xiàng),只需提供 3個(gè)參數(shù):起始位置、0(要?jiǎng)h除的項(xiàng)數(shù)) 和要插入的項(xiàng)。如果要插入多個(gè)項(xiàng),可以再傳入第四、第五,以至任意多個(gè)項(xiàng)。例如, splice(2,0,"red","green")會(huì)從當(dāng)前數(shù)組的位置 2開始插入字符串"red"和"green"。
- 替換:可以向指定位置插入任意數(shù)量的項(xiàng),且同時(shí)刪除任意數(shù)量的項(xiàng),只需指定 3 個(gè)參數(shù):起 始位置、要?jiǎng)h除的項(xiàng)數(shù)和要插入的任意數(shù)量的項(xiàng)。插入的項(xiàng)數(shù)不必與刪除的項(xiàng)數(shù)相等。例如, splice (2,1,"red","green")會(huì)刪除當(dāng)前數(shù)組位置 2 的項(xiàng),然后再從位置 2 開始插入字符串 "red"和"green"。
位置方法(ES5新增)
indexOf()
迭代方法(ES5新增)
- every():對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對每一項(xiàng)都返回 true,則返回 true。
- ** filter()**:對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回該函數(shù)會(huì)返回 true 的項(xiàng)組成的數(shù)組。
- forEach()對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù)。這個(gè)方法沒有返回值
- map():對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組。
-
some():對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對任一項(xiàng)返回 true,則返回 true。
** 以上方法都不會(huì)修改數(shù)組中的包含的值。**
歸并方法(ES5新增)
reduce()和 reduceRight() 迭代數(shù)組的所有項(xiàng),然后構(gòu)建一個(gè)終返回的值
var values = [1,2,3,4,5];
var sum = values.reduce(function(prev, cur, index, array){
return prev + cur;
});
alert(sum); //15
函數(shù)類型
函數(shù)是對象,函數(shù)名是指針
使用不帶圓括號的函數(shù)名是訪問函 數(shù)指針,而非調(diào)用函數(shù)
沒有重載
解析器會(huì)率先讀取函數(shù)聲明,并使其在執(zhí)行 任何代碼之前可用(可以訪問);至于函數(shù)表達(dá)式,則必須等到解析器執(zhí)行到它所在的代碼行,才會(huì)真 正被解釋執(zhí)行。例:
alert(sum(10,10));
function sum(num1, num2){
return num1 + num2;
}
//正常運(yùn)行
alert(sum(10,10));
var sum = function(num1, num2){
return num1 + num2;
};
//出錯(cuò)
根據(jù)某個(gè)對象屬性對數(shù)組進(jìn)行排序
function createComparisonFunction(propertyName) {
return function(object1, object2){
var value1 = object1[propertyName];
var value2 = object2[propertyName];
if (value1 < value2){
return -1;
} else if (value1 > value2){
return 1;
} else {
return 0;
}
}; }
var data = [{name: "Zachary", age: 28}, {name: "Nicholas", age: 29}];
data.sort(createComparisonFunction("name"));
alert(data[0].name); //Nicholas
data.sort(createComparisonFunction("age"));
alert(data[0].name); //Zachary
apply()和call()
- 傳參
- 擴(kuò)充作用域
window.color = "red";
var o = { color: "blue" };
function sayColor(){
alert(this.color);
}
sayColor(); //red
sayColor.call(this); //red
sayColor.call(window); //red
sayColor.call(o); //blue
bind()方法會(huì)創(chuàng)建一個(gè)函數(shù)的實(shí)例,其 this 值會(huì)被綁 定到傳給 bind()函數(shù)的值 (ES5新增)
window.color = "red";
var o = { color: "blue" };
function sayColor(){
alert(this.color);
}
var objectSayColor = sayColor.bind(o);
objectSayColor(); //blue