JS這一塊呢,本人曾經天真的以為只是為了做些頁面特效就ok了,隨着時間的深入,接觸的東西越來越多,越發覺得當初學JS的時候是多么的隨心所欲,於是整了本厚厚的犀牛書,慢慢啃~,順帶在博客上留下學習筆記,一做紀念,二則若有同道指點,亦是感激不盡。
既然是學到數組的時候動了記錄足跡的心思,那就從數組學習開始好了。
JS數組的定義與其他語言並沒有什么區別,不過,JS數組是動態的:根據需要他們會增長或縮減,並且在創建數組時無需聲明一個固定大小或者在數組大小變化時無需重新分配空間。JS數組的另外一個特點是其內容可能是稀疏的,他們之間可能有空缺。每個JS數組都有一個length屬性。一般來說數組的length即數組元素個數,但是針對稀疏數組來說,length的值顯然要比所有元素的索引要大。
1、了解了數組的這一特點之后,開始正式進入數組的學習。既然是學習數組,那么肯定是要有個數組來供人操作才行,這里,就需要進行數組的創建,下面是幾種常見的數組創建形式:
1 var empty = []; //空數組 2 var primes = [2,3,4,5]; //直接設置4個值的數組 3 var misc = [1.1,true,"a",]; //3個不同類型的元素和結尾的逗號,共4個元素
4 var a = [1,,3]; //數組有3個元素
從第三個數組我們可以知道,JS數組直接量中的值不一定要是常量,甚至它們可以是任意的表達式:
var base = 1024; var table = [base,base+1,base+2,base+3];
純手打,寫的糾結,還是直接記下學習過程中的一些不懂之處得了~~~
其他部分就簡寫個標題。
2、數組元素的讀和寫
3、稀疏數組
4、數組長度
JS數組的兩個特殊行為:
1.賦值時當數組元素索引大於或等於現有數組的長度時,length屬性的值將設置為i+1;
2.設置length屬性為一個小於當前長度的非負整數n時,當前數組中的那些索引值大於或等於n的元素將被刪除;
5、數組元素的添加和刪除
尾 頭
添加:push(); unshift();
刪除:pop(); shift();
delete:對一個數組元素使用delete不會修改數組的length屬性,也不會將元素從高索引處移下來填充已刪除屬性留下來的空白,而是直接變成了一個稀疏數組。
6、數組遍歷
1. for循環
通常來說,稠密數組直接使用for進行性循環即可,但是很多情況下頻繁的數組操作數的數組可以說是早已千瘡百孔也不為過,那么,針對某些特殊情況的稀疏數組,往往需要排除null、undefined、和不存在的元素
for(var i = 0;i < a.length;i++){ if(!a[i]) continue;//跳過null、undefined和不存在的元素 //循環體 } for(var i = 0;i < a.length;i++){ if(a[i]===undefined) continue;//跳過undefined和不存在的元素 //循環體 } for(var i = 0;i < a.length;i++){ if(!(i in a)) continue;//跳過不存在的元素 //循環體 }
但是由於for/in循環能夠枚舉繼承的屬性名,如添加到Array.prototype中的方法。因此,在數組上不應該使用for/in循環,屬非食用額外的檢測方法過濾不想要的屬性。
如下兩種方法二選其一即可:
for(var i in a){ if(!a.hasOwnProperty(i)) continue; //跳過繼承屬性 } for(var i in a){ //跳過不是非負整數的i if(String(Math.floor(Math.abs(Number(i))))!==i) continue; }
2. forEach()方法