javascript
关于JavaScript 数组 的一切
文章目錄
- :dart: JS里的"數組"不是數組,而是對象
- :dart: 聲明數組的方法
- :dart: 數組中的length屬性
- :dart: 如何判定一個對象是數組
- :dart: 數組的枚舉
- :dart: 數組的方法
- 查
- 刪
- 增
- 改
- 額外
🎯 JS里的"數組"不是數組,而是對象
js里的數組和其他語言中的數組是不同的,實際它并不是數組,而是一種array-like 特性的對象。
它只是把索引轉化成字符串,用作其屬性(鍵)。
例如:
var arr = ['a','b','c'] // 實際上 等價于 var obj = {'0': 'a','1': 'b','2': 'c' }這也正是為什么 typeof arr = object 的原因。
js 里的 數組 操作起來和其他語言中的數組 操作相似,比如Java。
但是同時js里的數組還能做到像Java這樣強類型語言里的數組 做不到的地方。
// js 單個數組中的元素可以有多種數據類型 var arr = [1,'2',false,[1]]; // 數據類型同時包括數字,字符串,布爾值,數組而Java 里的單個數組里的元素只能是同一種數據類型,例如如果聲明了int 數組,那么里面的元素就全是int類型的數據
毫無疑問,JS里的“數組”操作起來更加方便,但是這是犧牲性能換來的。
真正的數組是一段線性分配的內存,所以它操作起來速度更加快。
🎯 聲明數組的方法
// 1. 直接創建 var arr = []; //[] 空數組 // 2. new var arr = new Array(); //[] 空數組 var arr = new Array(1,2,3); //[1,2,3]對于數據中沒有初始化的元素,它的值是undefined;
var arr = [1,2]; //[1,2] console.log(arr[2]); // undefined🎯 數組中的length屬性
Js“數組”中length是一個奇怪的屬性
它的結果并不完全可信。一般數據里的length指的是數組中有值元素的個數
而js里的length并不是。
var arr = []; //[] console.log(arr.length); // 0 arr[5] = 1000; console.log(arr.length); // 1? 6?答案是6,但數組 arr 實際有值的就一個。
js里的length 指的是 這個數組的最大整數屬性名加上1,它不一定等于數組里屬性的個數。
此外,js里的length,你還可以隨意的把它變大變小,(簡稱隨地大小變)
var arr = [1,2,3]; arr.length = 1; console.log(arr); // 猜一下arr現在等于什么對,你沒有猜錯,arr 此時只剩下一個元素了,[1]
通過將length變小,可以去掉所有屬性名大于等于length的值
通過這一點,我們可以更加方便的刪除元素。
arr.length = 0; //清空數組 arr.length = arr.length-1; //去除掉末尾元素🎯 如何判定一個對象是數組
通過前面的講解,我們已經知道了Js里的數組實際是一個對象,
通過 typeof 來判斷也是對象
那我們怎么判定一個數組是我們想要的js數組呢。
function isArray(obj){return Object.prototype.toString.apply(obj) === '[object Array]';//這個可以直接拿去用,可確保是正確的 }🎯 數組的枚舉
let arr = [1,2,3];// 1. 普通for循環 for (let i = 0 ; i<arr.length ; i++){console.log(arr[i]); }// 2. for in 循環 (獲取到的是索引) for (let index in arr){console.log(arr[index]); }// 3. ES6新增 增強for循環 (獲取到的是元素的值) for(let item of arr){ console.log(item); }// 4. forEach 循環 arr.forEach(function(item,index){console.log(index,item); })🎯 數組的方法
任何語言對于數據的操作少不了增刪改查,我們就先從這四個角度去看。
查
根據屬性名去訪問就好了 arr[index]
刪
//arr.shift() 刪除第一個元素并返回 let arr = [1,2,3]; let element = arr.shift(); //element 是 1 console.log(element);//arr.pop() 刪除最后一個元素并返回 arr = [1,2,3]; element = arr.pop(); //element 是 3 console.log(element);增
// 和刪除相對應,增加也有從頭部增加和尾部增加// 插入單個元素 // 1. 從頭部插入 arr.unshift(item...) let arr = [1,2,3]; arr.unshift(0); console.log(arr); //[0,1,2,3]// 2. 從尾部插入 arr.push(item...) arr = [1,2,3]; arr.push(4); console.log(arr); //[1,2,3,4]// 插入多個元素 // 顯然如果插入多個元素,我們一個個去push是很麻煩的,所以提供了一個方法 // arr.concat(item...) concat 這個單詞的含義是合并數組; arr1 = [1,2]; arr2 = [3,4]; arr = arr1.concat(arr2); console.log(arr); //[1,2,3,4] & arr1 沒有改變 還是[1,2]// 關于從任意位置插入,在修改里面會講改
// 根據索引修改 arr[index] = value;// 數組修改其實要記一個 arr.splice(start,deleteCount,item...) /** * 參數 start:開始的索引 * deleteCount : 刪除元素的個數 * item: 要插入的元素值 * 返回值 被刪除的元素數組 */let arr = [1,2,3]; let a = arr.splice(0,1,'test'); //從0開始刪除一個元素,并在這個位置插入元素'test' console.log(arr); //["test",1,2] console.log(a); // [1]額外
- 數組轉字符串
- 數組復制
- 數組反轉
本文中,因為js里的數組實際就是對象,所以所有數組的索引都叫做屬性名。
總結
以上是生活随笔為你收集整理的关于JavaScript 数组 的一切的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文档树生成方法
- 下一篇: 【复习】原生Js实现文件上传