精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
JavaScript偽數組和數組

文章目錄

偽數組和數組

在JavaScript中,除了5種原始數據類型之外,其他所有的都是對象,包括函數(Function)。

對象與數組的關系

在說區別之前,需要先提到另外一個知識,就是 JavaScript 的原型繼承。
所有 JavaScript 的內置構造函數都是繼承自 Object.prototype 。
在這個前提下,可以理解為使用 new Array()[] 創建出來的數組對象,都會擁有 Object.prototype 的屬性值。

var obj = {};// 擁有 Object.prototype 的屬性值
var arr = [];
//使用數組直接量創建的數組,由于 Array.prototype 的屬性繼承自 Object.prototype,
//那么,它將同時擁有 Array.prototype 和 Object.prototype 的屬性值

可以得到對象和數組的第一個區別:對象沒有數組 Array.prototype 的屬性值。

什么是數組

數組具有一個最基本特征:索引,這是對象所沒有的,下面來看一段代碼:

var obj = {};
var arr = [];
 
obj[2] = 'a';
arr[2] = 'a';
 
console.log(obj[2]); // => a
console.log(arr[2]); // => a
console.log(obj.length); // => undefined
console.log(arr.length); // => 3
  • obj[2]輸出’a’,是因為對象就是普通的鍵值對存取數據
  • 而arr[2]輸出’a’ 則不同,數組是通過索引來存取數據,arr[2]之所以輸出’a’,是因為數組arr索引2的位置已經存儲了數據
  • obj.length并不具有數組的特性,并且obj沒有保存屬性length,那么自然就會輸出undefined
  • 而對于數組來說,length是數組的一個內置屬性,數組會根據索引長度來更改length的值
  • 為什么arr.length輸出3,而不是1
    • 在給數組添加元素時,并沒有按照連續的索引添加,所以導致數組的索引不連續,那么就導致索引長度大于元素個數

什么是偽數組

  1. 擁有 length 屬性,其它屬性(索引)為非負整數(對象中的索引會被當做字符串來處理,這里你可以當做是個非負整數串來理解)
  2. 不具有數組所具有的方法

偽數組,就是像數組一樣有 length 屬性,也有 0、1、2、3 等屬性的對象,看起來就像數組一樣,但不是數組,比如:

var fakeArray = {
  "0": "first",
  "1": "second",
  "2": "third",
  length: 3
};
 
for (var i = 0; i < fakeArray.length; i++) {
  console.log(fakeArray[i]);
}
 
Array.prototype.join.call(fakeArray,'+');

常見的偽數組有:

  • 函數內部的 arguments
  • DOM 對象列表(比如通過 document.getElementsByTags 得到的列表)
  • jQuery 對象(比如 $("div")

偽數組是一個 Object,而真實的數組是一個 Array。

偽數組存在的意義,是可以讓普通的對象也能正常使用數組的很多方法,比如:

var arr = Array.prototype.slice.call(arguments);
 
Array.prototype.forEach.call(arguments, function(v) {
  // 循環arguments對象
});

// push
// some
// every
// filter
// map
// ...

以上在借用數組的原型方法的時候都可以通過數組直接量來簡化使用:

var obj = {
  0: 'a',
  1: 'b',
  2: 'c',
  length: 3
}

;[].push.call(obj, 'd')

console.log([].slice.call(obj))

;[].forEach.call(obj, function (num, index) {
  console.log(num)
})

二者區別

1.長度:

  • 真數組的長度是可變的
  • 偽數組的長度不可變

2.方法的使用:

  • 真數組可以使用數組中的方法
  • 偽數組不可以使用數組中的方法

小結

  • 對象沒有數組 Array.prototype 的屬性值,類型是 Object ,而數組類型是 Array
  • 數組是基于索引的實現, length 會自動更新,而對象是鍵值對
  • 使用對象可以創建偽數組,偽數組可以正常使用數組的大部分方法
本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
js數組的操作
JavaScript,通過分析Array.prototype.push重新認識Array
這幾種前端JavaScript方法封裝你知道多少
JavaScript之數組去重
js語言規范ES5、6、7
ES6,ES7,ES8,ES9,ES10新特性一覽
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 稷山县| 阿拉善左旗| 高安市| 海丰县| 凤台县| 仲巴县| 固镇县| 郁南县| 武山县| 龙里县| 景谷| 东兰县| 东安县| 天柱县| 扶风县| 长子县| 家居| 方山县| 通榆县| 神池县| 米泉市| 黄大仙区| 山东| 仁布县| 龙门县| 应城市| 凤阳县| 南汇区| 古交市| 毕节市| 新化县| 龙泉市| 巴彦淖尔市| 德兴市| 古交市| 天等县| 湖州市| 和顺县| 沙河市| 宁强县| 五大连池市|