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

    恩,今天就到这里。

  • 相关阅读:
    idea 管理java 多module的工程
    协程与函数线程异步的关系
    HDU 5640 King's Cake【模拟】
    逻辑运算
    Silverlight 学习笔记——布局 Evil 域 博客园
    ExtJS 日期格式问题
    偏方收藏(此信息为本人收藏,安全性无法验证,使用后产生的一些后果自负)
    form和column:extJS的布局
    Sqlserver 通用存储过程分页
    Ext中TreePanel控件和TabPanel控件搭配测试
  • 原文地址:https://www.cnblogs.com/hutaoer/p/3421907.html
Copyright © 2011-2022 走看看