TypeScript學習(八):數組的補充及內置對象說明

在前面我們提到了有關數組的定義和數組的一些特性,那篇博客只提到了三種定義方式,這裏我們再補充兩種方式:

第一種:數組泛型

// 語法格式:Array<elemType>
let list: Array<number> = [1, 2, 3];

第二種:類數組

function sum() {
    let args: {
        [index: number]: number;
        length: number;
        callee: Function;
    } = arguments;
}

上述兩種方式,第一種比較好理解,但是第二種,看上去就很麻煩了。

我們先弄清楚什麼是類數組?字面意思,就是像數組的數組,典型的代表就是內置對象arguments了。這裏,我們先來簡單說一下內置對象arguments:

我們可以這麼來理解,內置對象首先就是內置,內置在哪兒呢?答案就是函數,每個函數內都有一個arguments。其次內置對象就是對象,那麼arguments這個對象內一般包含哪些屬性呢?答案是它包括了函數所要調的參數,通常我們把它當作數組使用,用它的length得到參數數量,但它卻不是數組,不過我們還是可以利用arguments來使用傳遞進來的實參,arguments[0]表示獲取的第一個實參,arguments[1]表示獲取的第二個實參.......以此類推。同時arguments還有一個callee,對應一個函數對象,就是當前正在指向的函數的對象。附上一個例子來方便理解,代碼如下:

function fnc() {
    // 獲取的是函數在調用的時候,傳入了幾個參數
    // 再次強調:arguments不是數組,它僅僅具有數組的length屬性,不具備數組的其它特性
    console.log(arguments.length);
    // 使用arguments 對象可以獲取傳入的每個參數的值
    console.log(arguments);
    // arguments的callee屬性可以返回對應的原函數,達到調用自身函數的效果,但是在嚴格模式中是不適用的
    console.log(arguments.callee === fnc);    //true
}
fnc(1, 2, 3, 4, 5);

簡單介紹完內置對象後,我們再看下類數組的定義方式:

function sum() {
    let args: {
        [index: number]: number;
        length: number;
        callee: Function;
    } = arguments;
}

我們定義了類數組內三種值類型,首先是函數傳遞進來的參數,在arguments中索引必須是number類型,其對應傳遞進來的參數也是number類型,就類似於前面提到的例子fnc(1, 2, 3, 4, 5);其次,arguments的length屬性我們也限制了它的值爲number類型的;最後就是arguments的callee屬性了,同樣我們限制了它的類型是函數Function類型。這就是類數組的定義,這種方式我們平時用的很少,所以瞭解一哈即可。

 

到底啦!!!!!!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章