《JavaScript高級程序設(shè)計(jì)》筆記(1)

數(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  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容