zoukankan      html  css  js  c++  java
  • 【javascript 技巧】Array.prototype.slice的妙用

     

    Array.prototype.slice的妙用

    开门见山,关于Array 的slice的用法可以参考这里 http://www.w3school.com.cn/js/jsref_slice_array.asp 。

    除了常见的从某个数组中抽取出新的数组外,它还有一些其他的用法。

    经常的,可以看到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

    恩,今天就到这里。

  • 相关阅读:
    照片墙效果一多实例演示【已封装】
    把javascript event事件封装了下,兼容大多数浏览器
    catch error
    call tcl from c
    scrollbar
    sharedlibextension
    treectrl
    get file name part
    namespace eval
    glob
  • 原文地址:https://www.cnblogs.com/hutaoer/p/3421907.html
Copyright © 2011-2022 走看看