TypeScript学习(八):数组的补充及内置对象说明

在前面我们提到了有关数组的定义和数组的一些特性,那篇博客只提到了三种定义方式,这里我们再补充两种方式:

第一种:数组泛型

// 语法格式:Array
let list: Array = [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类型。这就是类数组的定义,这种方式我们平时用的很少,所以了解一哈即可。

 

到底啦!!!!!!!!

你可能感兴趣的:(typescript)