JavaScript面向對象的編程指南(第2版)學習筆記(一)

第一章

1,用本身的語言描述出,什麼是對象、類、封裝、聚合、繼承、多態?css

對象,擁有屬性和方法的任何抽象概念。
類,能夠實例化,有共同屬性或方法(行爲)的類似對象,的模板
封裝,提供接口,隱藏接口的實現
聚合,將大功能(對象)拆分紅小功能(小對象)去實現的逆過程。
繼承,子類經過繼承得到父類的方法或屬性
重寫,子類繼承父類的方法,改爲本身的實現。
多態,、對傳遞的參數判斷來執行邏輯,一種多態處理機制

第二章

1,在控制檯輸入表達式後,返回undefined緣由:segmentfault

有時可能會看到某個表達式在控制檯中的輸出,結果爲 undefined。爲何這些表達式會輸出 undefined 呢?
控制檯在執行完輸入的表達式後,輸出的該表達式運行結果,若是表達式沒有返回值,undefined,不然返回返回值。

2, css 中顏色表示的兩種方式數組

rgb(0,0,0)  黑色
rgb(255,0,0)  紅色
\#ff0000  紅色
三基色的順序都是 red,green,blue

3, 爲何返回結果不一致,a爲啥不是NaN呢?閉包

參考提問 https://segmentfault.com/q/1010000014772302
var a = 9/0;
typeof a;
"number"
a;
Infinity

typeof 9/0;
NaN

4,類型轉換函數

將數字字符串轉成數字,*1, 轉換失敗NaN
其餘類型轉爲字符串,+""

var s = '100';
s=s*1;
typeof s;

5,哪些值雙重取反後,返回false?編碼

「」,undefined, null, 0, NaN, false
"0", "false", " "  爲 true

6,null和undefined區別之一url

在轉成布爾值類型時候一致
在轉爲數字類型的數值時,會有區別

Number(null) 0,
Number(undefined) NaN

1*null  = 0;
1+null = 1;

1*undefined = NaN;
1+undefined = NaN;

7,判斷一個元素是否初始化。code

檢查變量是否存在。
咱們通常不判斷是,判斷不是
在判斷元素是否存在時候,最好使用typeof
if(somevar){
    balabal
}
//若是沒有定義會有警告

if(typeof somevar !=='undefined'){
    balabala
}

第三章

1,函數返回值對象

一個函數只能有一個返回值,若是有多個返回值,使用數組的形式返回。
return 子句,返回值,就是函數的返回值。

2,函數的參數,傳到方法中的究竟是什麼值?繼承

函數聲明時候,會設置函數的參數,若是調用時候沒有傳遞相關的參數值,js默認爲undefined
function sum(a,b){
    return a+b;
}
sum(1);  //NaN

少了,默認undefined
多了,忽略多傳的參數。

3, 形參長度和實參長度的區別

arguments.length 是實參的長度,調用函數時候,像函數傳遞了幾個參數的長度.
arguments.callee.length = function.length 形參的長度。
function sum(a,b,c){
    console.log(arguments.length);
    return a+b+c;
}
sum(1,2,3,4,5);

5


sum.length;
3
function sum(a=1,b,c){
    console.log(arguments.length);
}
sum(1,2,3,4,5);
5

sum.length;
爲啥是0?
0????????

4, 預約義函數

parseInt 將接受的任何值,轉成整數類型輸出。失敗,返回NaN。
parseFloat 只支持將輸入值轉換成十進制數,該函數只有一個參數。
isFinite(Infinity) //false
是不是有限的,Infinity無限的。

5, encodeURI 和 encodeURIComponent的區別;

它用於對URL的組成部分進行個別編碼。
後者對整個url進行編碼,包括一些特殊字符。

6,函數聲明和函數表達式

function a() //聲明
var a = function()  //函數表達式

7,匿名函數

7.1回調函數
何時執行回調函數?將函數c傳遞給函數A,由函數A來執行函數c就造成回調函數。
示例:將一個函數的返回值傳遞給另外一個函數。
function add(a){
    return a+1;
}
function(arr, callback){
    for(var i = 0;i<arr.length;i++){
        arr[i] = callback(arr[i]*2);
    }
}

7.2當即執行函數

// 兩種寫法
(function(){})();
(function(){}())
//第二種寫法總是忘記
//優勢:不會產生任何全局變量。

7.3 修改自身的函數

function a (){
    alert(1);
    a= function(){
        alert(2);
    }
}
//第一次執行和第二次執行就不同了

返回函數的函數

function a (){
    alert(1);
    return function(){
        alert(2);
    }
}
  a()();

複習:閉包返回當前值的緣由, 如何解釋循環閉包打印出來是數組長度?

每一個數組都指向了一個共同的局部變量i,可是閉包不會記錄i的值,只是擁有在相關域建立時候的一個引用,執行的時候,會從所在域逐級尋找最近的i值,for循環結束後,都指向了那個共同的值。
相關文章
相關標籤/搜索