2 a894982165 a894982165 于 2017.09.08 17:38 提问

js跪求大神指点迷津[].slice.call中.slice的参数问题

// ES5的写法
var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']
这是例子;
我看js教程说 DOM方法中说到slice() 这个括号里面必须要放一个参数 可对比上面的例子我没看到参数呢, 跪求指教一二

3个回答

devmiao
devmiao   Ds   Rxr 2017.09.08 22:50
a894982165
a894982165 3q
2 个月之前 回复
qq_36936155
qq_36936155   2017.09.12 22:34

上面格式有问题重新发一次
因为arrayLike不一定是一个Array对象,它是一个类数组对象,
类数组对象
1.拥有length属性,其它属性(索引)为非负整数(对象中的索引会被当做字符串来处理,这里你可以当做是个非负整数串来理解)
2.不具有数组所具有的方法
所有这里显示的创建一个空数组调用其slice方法并把它放入arrayLike的执行上下文(call的显示绑定this到arrayLike),这样这个类数组对象中数字索引(在对象中数字的键会被转为字符串,比如'1','2')就可以被slice处理

举个栗子

    arrayLike = {
                    1 : 'a',//实际上1会被转为'1',下面以此类推
                    2 : 'b',
                    3 : 'c',

        'color' : 'red',
        length : 3
    }

    var arr = [].slice.call(arrayLike); // ['undefined', 'a', 'b'],slice()不带参数是可以执行的相当于复制了这个类数组对象的0~length-1的键值对并返回一个数组,如果是一个数组那么就是返回从0到最后一个索引的数组的拷贝(一个新的数组)

a894982165
a894982165 3q
2 个月之前 回复
qq_36936155
qq_36936155   2017.09.12 22:32

因为arrayLike不一定是一个Array对象,它是一个类数组对象,
类数组对象
1.拥有length属性,其它属性(索引)为非负整数(对象中的索引会被当做字符串来处理,这里你可以当做是个非负整数串来理解)
2.不具有数组所具有的方法
所有这里显示的创建一个空数组调用其slice方法并把它放入arrayLike的执行上下文(call的显示绑定this到arrayLike),这样这个类数组对象中数字索引(在对象中数字的键会被转为字符串,比如'1','2')就可以被slice处理

举个栗子
arrayLike = {

}

arrayLike = {
1 : 'a',//实际上1会被转为'1',下面以此类推
2 : 'b',
3 : 'c',

            'color' : 'red',
            length : 3
        }

        var arr = [].slice.call(arrayLike); // ['undefined', 'a', 'b'],slice()不带参数是可以执行的相当于复制了这个类数组对象的0~length-1的键值对并返回一个数组,如果是一个数组那么就是返回从0到最后一个索引的数组的拷贝(一个新的数组)
Csdn user default icon
上传中...
上传图片
插入图片