javascript Array.prototype.slice的使用示例 |
本文标签:slice,Array 经常的,可以看到Array.prototype.slice(arguments, 0); 这个写法可以用于function() {} 内,这样可以将函数的参数列表转换成一个真正的数组 。请看一个例子: 复制代码 代码如下: 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了 。 同样的,也可以将选中的DOM元素转换成数组: 复制代码 代码如下: 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"] 每次,字符串会直接被转换成了一个数组 。 但是,数字,布尔值的会转换成一个空的数组: 复制代码 代码如下: console.log(slice.call(33)); console.log(slice.call(true)); 普通的对象也会被转换成空数组,除非你给它加上一个length属性: 复制代码 代码如下: 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 |