前端面试基础必备JS学习笔记

JS 类数组对象arguments和数组对象的区别

2018-09-13  本文已影响15人  puxiaotaoc

一、类数组对象的定义:

      1)拥有length属性,其它属性(索引)为非负整数(对象中的索引会被当做字符串来处理);
      2)不具有数组所具有的方法;
      javascript中常见的类数组有 arguments 对象和 DOM 方法的返回结果,比如
document.getElementsByTagName() ;

// 类数组示例 1
  var nodeList = document.getElementsByTagName('ul');
  console.log(nodeList instanceof Array); // false 类数组
  console.log(nodeList[0]); // <ul>...</ul>
//类数组示例 2
var a = {'1':'gg','2':'love','4':'meimei',length:5};
Array.prototype.join.call(a,'+');//'+gg+love++meimei'

//非类数组示例
var c = {'1':2};   //没有length属性就不是类数组
//类数组示例 3
  var obj = {a:1};
  function process(obj){
    obj={};
  }
  console.log(obj); // {a: 1}
//类数组示例 4
function b(x, y, a) {
    arguments[2] = {"name" : "func"};
    alert(a.name);    //"func"
}
b(1, 2, {"name" : "win"});
//类数组示例 5
  function b(x,y,a){
    var arr = [x,y,a];
    arr[2]={
      "name":"func"
    };
    alert(a.name);
  }
  b(1,2,{"name":"win"}); // win
// length是数组的一个内置属性
// 对象以键值对存取数据
// 数组通过索引来存取数据
  var obj = {};
  var arr = [];
  obj[2] = 'a';
  arr[2] = 'a';
  console.log(obj); // {2: "a"}
  console.log(arr); // [empty × 2, "a"]
  console.log(obj.length); // undefined
  console.log(arr.length); // 3
// obj并不具有length属性
  var obj ={
    name: 'aa',
    age: 24
  }
  console.log(obj.length); // undefined
// auguments是伪数组
(function() {
    console.log(typeof arguments); // object
}());
// 在DOM对象中,childNodes也是伪数组
console.log(typeof document.body.childNodes); // object

二、类数组转换成数组

// 类数组转换成数组
Array.prototype.slice.call(arrayLike)
var toArray = function(s){  
   try {  
       return Array.prototype.slice.call(s);  
   } catch(e){  
       var arr = [];  
       for(var i = 0,len = s.length; i < len; i++){  
          //arr.push(s[i]);  
          arr[i] = s[i];     //据说这样比push快
       }  
       return arr;  
    } 
}
   Function.prototype.my_bind = function() {
      var self = this, // 保存原函数
        context = Array.prototype.shift.call(arguments), // 保存需要绑定的this上下文
        // 上一行等价于 context = [].shift.call(arguments);
        args = Array.prototype.slice.call(arguments); // 数组转换为类数组
      return function() { // 返回一个新函数
        self.apply(context, Array.prototype.concat.call(args, Array.prototype.slice.call(arguments)));
      }
    }

  function a(m, n, o) {
    console.log(this.name + ' ' + m + ' ' + n + ' ' + o);
  }

  var b = {
    name: 'kong'
  };

  a.my_bind(b, 7, 8)(9); // kong 7 8 9

参考链接:
js类数组转数组的方法(ArrayLike)

1

](https://www.cnblogs.com/guorange/p/6668440.html)

上一篇下一篇

猜你喜欢

热点阅读