亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

深入探密Javascript數組方法

2019-11-20 13:28:28
字體:
來源:轉載
供稿:網友

在JavaScript中,數組可以使用Array構造函數來創建,或使用[]快速創建,這也是首選的方法。數組是繼承自Object的原型,并且他對typeof沒有特殊的返回值,他只返回'object'。

1. Array.prototype.slice方法
數組的 slice 方法通常用來從一個數組中抽取片斷。不過,它還有將“類數組”(比如arguments和​HTMLCollection​)轉換為真正數組的本領。

復制代碼 代碼如下:

 var nodesArr = Array.prototype.slice.call(document.forms);
 var argsArr = Array.prototype.slice.call(arguments);

我就好奇了為什么數組的slice方法有這樣的本領,它在javascript引擎中是如何實現的?slice的兄弟方法有沒有這樣的本領?

帶著好奇心,下載Google的V8 javascript引擎源碼到本地,V8源碼的下載地址:https://github.com/v8/v8。

在v8-master/src/array.js中查找“Array.prototype.slice”:

復制代碼 代碼如下:

function ArraySlice(start, end) {
  CHECK_OBJECT_COERCIBLE(this, "Array.prototype.slice");
  ...
  var result = []; // 這句是關鍵
  if (end_i < start_i) return result;
  if (UseSparseVariant(array, len, IS_ARRAY(array), end_i - start_i)) {
     ...
    SparseSlice(array, start_i, end_i - start_i, len, result);
  } else {
    SimpleSlice(array, start_i, end_i - start_i, len, result);
  }
  ...
  return result;

接著猜想調用“類數組”走的應該是SimpleSlice方法,然后在源碼查找“SimpleSlice“,發現Array.prototype.splice源碼中也調用了SimpleSlice方法,且結果變量也初始化為空數組。不過,想用splice方法把“類數組”轉化為真正數組,必須要傳入起始位置參數為0,即:

復制代碼 代碼如下:

 var nodesArr = Array.prototype.splice.call(document.forms, 0);

因為它的實現原理就是將被刪除的數組項組成新數組。感興趣的童鞋可以看下Array.prototype.splice的源碼實現。
此外,slice還可以克隆一個數組:

復制代碼 代碼如下:

 var arr = [1, 2, 3];
 var cloneArr = arr.slice(); // cloneArr:  [1, 2, 3]

2. Array.prototype.push 方法
使用 push方法可以合并數組:

復制代碼 代碼如下:

 var arr1 = [1, 'str', {name: 'lang'}];
 var arr2 = [2, 'ing'];
 Array.prototype.push.apply(arr1, arr2);
 // 返回結果:[1, "str", {name: 'lang'}, 2, "ing"]

3. Array.prototype.sort 方法
先上代碼:

復制代碼 代碼如下:

var arr = ['1', '2', '10', '12'];
arr.sort();
// 返回結果:["1", "10", "12", "2"]

上面的結果通常不是我們想要的,那么如何按數值大小排序:

復制代碼 代碼如下:

arr.sort(function(a, b) {
  return a - b;
})
// 返回結果:["1", "2", "10", "12"]

有了排序比較器函數之后,就可以自定義很多比較器,從而實現個性化的排序。

4. length 屬性
數組的length屬性,不是只讀的,也就說還可寫哦,比如使用length屬性去截斷數組:

復制代碼 代碼如下:

 var arr = [1, 2, 3, 4];
 arr.length = 2;
 // arr: [1, 2]
 arr.length = 0;
 // arr: []

與此同時,如果把length屬性變大,數組的長度值變會增加,且使用undefined來作為新的元素填充。

復制代碼 代碼如下:

 var arr = [];
 arr.length = 3;
 // arr: [undefined, undefined, undefined]

好了,今天就總結到這里了,已經凌晨了,以后有什么新發現再append到這里。
之前,沒有寫博客的習慣,只習慣把平時的總結放到有道云筆記中,沒想到把觀點寫出來著實要花點心思的,因為要考慮如何表達,才能讓別人更好地理解。

有什么表達不對或理解錯誤的地方,還望大家幫忙指正出來。

另附上一些常用的javascript數組方法

concat()連接兩個或更多的數組,并返回結果。
join()把數組的所有元素放入一個字符串。元素通過指定的分隔符進行分隔。
pop()刪除并返回數組的最后一個元素
push()向數組的末尾添加一個或更多元素,并返回新的長度。
reverse()顛倒數組中元素的順序。
shift()刪除并返回數組的第一個元素
slice()從某個已有的數組返回選定的元素
sort()對數組的元素進行排序
splice()刪除元素,并向數組添加新元素。
toSource()返回該對象的源代碼
toString()把數組轉換為字符串,并返回結果。
toLocaleString()把數組轉換為本地數組,并返回結果。
unshift()向數組的開頭添加一個或更多元素,并返回新的長度。
valueOf()返回數組對象的原始值

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区二区三区久久精品| 国产成人精品久久亚洲高清不卡| 亚洲视频在线视频| 欧美一级电影久久| 精品香蕉在线观看视频一| 日韩精品欧美国产精品忘忧草| 久久人人爽国产| 国产一区二区三区免费视频| 国产日韩欧美黄色| 中日韩美女免费视频网址在线观看| 97在线观看免费高清| 欧美视频一区二区三区…| 亚洲japanese制服美女| 在线一区二区日韩| 亚洲男人av在线| 成人啪啪免费看| 亚洲色图第一页| 亚洲自拍偷拍网址| 国内精品久久久久久中文字幕| 在线播放亚洲激情| 色妞色视频一区二区三区四区| 欧美高跟鞋交xxxxhd| 深夜精品寂寞黄网站在线观看| 国外成人在线播放| 国产亚洲精品va在线观看| 午夜精品一区二区三区视频免费看| 欧美尺度大的性做爰视频| 欧美国产在线视频| 国产精品中文字幕在线| 欧美电影在线观看完整版| 欧美一乱一性一交一视频| 性欧美长视频免费观看不卡| 欧亚精品中文字幕| 麻豆国产va免费精品高清在线| 黑人巨大精品欧美一区二区免费| 日韩视频中文字幕| 日韩精品在线视频| 欧美成人激情视频免费观看| 一区二区成人av| 国产a级全部精品| 久久精品成人欧美大片古装| 国产精品久久久久福利| 26uuu国产精品视频| 国产婷婷97碰碰久久人人蜜臀| 国产欧美在线播放| 欧美高清无遮挡| 中文字幕最新精品| 日本高清+成人网在线观看| 久久久免费精品视频| 久久久天堂国产精品女人| 欧美猛男性生活免费| 午夜精品久久久久久久99热| 国产综合福利在线| 久久久久久国产精品美女| 国产日本欧美一区二区三区在线| 亚洲欧美日韩久久久久久| 欧美疯狂xxxx大交乱88av| 九九久久久久久久久激情| 国产精品v片在线观看不卡| 2023亚洲男人天堂| 97视频在线观看成人| 91产国在线观看动作片喷水| 国产欧美精品va在线观看| 精品国产一区二区三区久久狼黑人| 琪琪第一精品导航| 国产一区二区久久精品| 国产精品久久久久7777婷婷| 欧美精品激情blacked18| 日韩中文字幕在线视频播放| 日韩av中文字幕在线播放| 欧美福利小视频| 久久综合伊人77777尤物| 亚洲精品国产精品国自产观看浪潮| 亚洲成人激情在线| 欧美亚洲在线播放| 国产精品女主播| 国产免费观看久久黄| 欧美高清自拍一区| 国产精品久久久久久久久久新婚| 亚洲精品美女免费| 国模gogo一区二区大胆私拍| 国产精品久久久久久久久久东京| 欧美电影免费观看大全| 69久久夜色精品国产69乱青草| 国产一区二区三区在线看| 91久久国产精品| 久久伊人精品视频| 亚洲午夜未满十八勿入免费观看全集| 久久久精品久久久久| 超碰97人人做人人爱少妇| 91夜夜未满十八勿入爽爽影院| 久久久精品视频成人| 精品在线欧美视频| 成人做爽爽免费视频| 亚洲精品久久久久久久久久久久| 欧美性理论片在线观看片免费| 韩国三级日本三级少妇99| 91经典在线视频| 欧美黑人一级爽快片淫片高清| 精品中文视频在线| 日韩成人av在线| 久久久久久久久久av| 日韩欧美高清在线视频| 91sa在线看| 激情亚洲一区二区三区四区| 国产在线观看91精品一区| 在线精品视频视频中文字幕| 亚洲人成电影网站色xx| 国产中文字幕91| 日韩欧美高清在线视频| 亚洲电影在线观看| 超碰91人人草人人干| 国内伊人久久久久久网站视频| 成人免费黄色网| 最近中文字幕mv在线一区二区三区四区| 福利二区91精品bt7086| 日本不卡视频在线播放| 一本色道久久88亚洲综合88| 欧美精品在线极品| 91精品国产色综合久久不卡98口| 久久免费视频在线| 国产又爽又黄的激情精品视频| 欧美亚洲激情在线| 91精品久久久久久久久久久久久久| 激情av一区二区| 亚洲国产成人91精品| 国产丝袜一区二区三区| 欧美一区三区三区高中清蜜桃| 一区二区欧美久久| 这里只有精品在线观看| 成人看片人aa| 国产91精品久久久久| 色777狠狠综合秋免鲁丝| 欧美精品少妇videofree| 国产精品日韩在线播放| 国产欧美一区二区三区久久| 91欧美视频网站| 91国内精品久久| 一区二区三区在线播放欧美| 欧美日韩国产色| 国产精品精品视频| 欧美精品激情在线观看| 久久99国产精品自在自在app| 日本精品免费一区二区三区| 欧美高清视频在线| 久久久久久综合网天天| 国产精品久久9| 国产精品成人观看视频国产奇米| 91精品免费久久久久久久久| 岛国av一区二区三区| 国产91色在线|| 国产欧美日韩最新| 国产精品美女主播在线观看纯欲| 97在线观看视频| 最近的2019中文字幕免费一页| 成人免费高清完整版在线观看| 欧美洲成人男女午夜视频| 欧美激情在线观看| 精品久久久久久久久久久久久| 91国内免费在线视频| 亚洲精品国产suv| 久久精品视频播放| 色偷偷噜噜噜亚洲男人的天堂| 久久中文久久字幕|