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

    恩,今天就到这里。

  • 相关阅读:
    bzoj2143 飞飞侠
    Codeforces 543.B Destroying Roads
    Codeforces 666.B World Tour
    bzoj2441 [中山市选2011]小W的问题(debug中)
    bzoj2329 [HNOI2011]括号修复
    一些新发现的好东西
    < meta http-equiv = "X-UA-Compatible" content = "IE=edge,chrome=1" />的作用
    js经典代码技巧学习之一:使用三元运算符处理javascript兼容
    《javascript高级程序设计》笔记4.1.4:检测类型
    页面关闭和刷新事件
  • 原文地址:https://www.cnblogs.com/hutaoer/p/3421907.html
Copyright © 2011-2022 走看看