一、类数组对象的定义:
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)
网友评论