Array.prototype.slice的妙用数组
开门见山,关于Array 的slice的用法能够参考这里 http://www.w3school.com.cn/js/jsref_slice_array.asp 。ide
除了常见的从某个数组中抽取出新的数组外,它还有一些其余的用法。函数
常常的,能够看到Array.prototype.slice(arguments, 0); 这个写法能够用于function() {} 内,这样能够将函数的参数列表转换成一个真正的数组。请看一个例子:spa
var slice = Array.prototype.slice; var toString = Object.prototype.toString; (function() { var args = arguments; console.log(args, toString.call(args)); // [1, 2, 3] "[object Arguments]" var argsArr = slice(args, 0); console.log(argsArr, toString.call(argsArr)); // [1, 2, 3] "[object Array]" }(1,2,3))
咱们能够看到函数的参数列表arguments经过slice调用之后,一秒钟变Array了。prototype
一样的,也能够将选中的DOM元素转换成数组:code
slice.call(document.querySelectorAll("div"));
顺藤摸瓜,咱们想一想,slide方法是否能够将对象转换成数组呢?请看例子:对象
console.log(slice.call('string')); // ["s", "t", "r", "i", "n", "g"] console.log(slice.call(new String('string'))); // ["s", "t", "r", "i", "n", "g"]
每次,字符串会直接被转换成了一个数组。blog
可是,数字,布尔值的会转换成一个空的数组:字符串
console.log(slice.call(33)); // [] console.log(slice.call(true)); // []
普通的对象也会被转换成空数组,除非你给它加上一个length属性:get
console.log(slice.call({name: 'obj'})); // [] console.log(slice.call({0: 'zero', 1: 'one'})); // [] console.log(slice.call({0: 'zero', 1: 'one', name: 'obj', length: 2})); // ["zero", "one"]
还有,它还能够用来clone数组:
var srcArr = [1,2,3]; var newArr = srcArr.slice(0); console.log(srcArr, newArr); // [1,2,3] [1,2,3] console.log(srcArr == newArr); // false
恩,今天就到这里。