欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ES6中的數(shù)組擴展方法

 更新時間:2016年08月26日 17:07:25   作者:不一樣的追尋著  
這篇文章主要介紹了ES6中的數(shù)組擴展方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下

form 轉(zhuǎn)化為真正的數(shù)組

先說一下使用場景,在Js中,我們要經(jīng)常操作DOM,比如獲取全部頁面的input標簽,并且找到類型為button的元素,然后給這個按鈕注冊一個點擊事件,我們可能會這樣操作;

var inputObjs=document.getElementsByTagName('input');
for(var i=0;i<inputObjs.length;i++){
if(inputObjs[i].type==='button'){
inputObjs[i].onclick=function(){
return;
}
}
}

這樣寫肯定是沒有問題的,但是我們知道很多操作數(shù)組的方法比for循環(huán)好用多了,比如es5的forEach方法就很好用;但是能直接用嗎?不能!因為dom對象集合不是一個真正得Array數(shù)組類型,直接使用會報錯的;

var inputObjs=document.getElementsByTagName('input');
inputObjs.forEach(); //inputObjs.forEach is not a function

盡管如此我們還是可以用,不能直接用可以間接用,使用js強大的對象冒充功能即可;

var inputObjs=document.getElementsByTagName('input');
console.info(inputObjs); //[]length: 0__proto__: HTMLCollection
console.info([].slice.call(inputObjs)); //[]length: 0__proto__: Array[0]

這樣轉(zhuǎn)化為真正的數(shù)組之后就可以隨便調(diào)用數(shù)組的方法啦;這種方法固然可行,但是不太容易理解而且太過于“曲折”,es6給我們提供了一個更為簡單直接的方法,form,使用起來很簡單:

var inputObjs=document.getElementsByTagName('input');
console.info(inputObjs); //[]length: 0__proto__: HTMLCollection
console.info(Array.from(inputObjs)); //[]length: 0__proto__: Array[0]

結(jié)果是一樣的但是語義上更加貼切也更容易理解,是不是很好用??!當然這些還不夠,不僅僅是類數(shù)組任何數(shù)據(jù)類型都能使用此方法轉(zhuǎn)化為數(shù)組,但是不同的類型效果是不一樣的,測試如下:

let str='google';
console.log(Array.from(str)); //["g", "o", "o", "g", "l", "e"]
let num=234;
console.log(Array.from(num)); //[]
let bol=false;
console.log(Array.from(bol));
let obj={foo:'foo',bar:'bar'};
console.log(Array.from(obj)); //[]
let superObj={0:'foo',1:'bar',length:2};
console.log(Array.from(superObj)); //["foo", "bar"]

這里列出了不同的數(shù)據(jù)類型調(diào)用該方法后的結(jié)果,值得留意的是字符串和一些特殊對象是可以轉(zhuǎn)化為有內(nèi)容的數(shù)組的,特殊的對象是指內(nèi)容按照數(shù)字鍵值對排列,并且有l(wèi)ength屬性的對象;這種對象是可以使用for循環(huán)的,而字符串也是可以使用for循環(huán)來得到每一個字符的,所以歸結(jié)為一句話,能使用for循環(huán)輸出內(nèi)容的使用from方法就不是一個空數(shù)組;在這里提醒一下,使用過jQuery的小伙伴可以留意一下,當你使用選擇器選擇元素返回的jquery對象是什么結(jié)構(gòu)的?其實就是我們例子中最后一個的結(jié)構(gòu),具體可以參考我的jQuery源碼分析系列文章

of 將值轉(zhuǎn)化為數(shù)組

創(chuàng)建數(shù)組有兩種方法一種是構(gòu)造函數(shù)式:

let arr=Array(1,2,3);

另一種是最常用的字面量創(chuàng)建:

let arr=[1,2,3];

Array.of方法其實是對第一個種方式的補充,用法如下:

console.log(Array.of(1,2,3)); //[1,2,3]

貌似跟跟構(gòu)造方法一樣的效果,那這個方法為什么還有存在的必要呢?看下面的例子就明白了:

console.log(Array()); //[]
console.log(Array(1)); //[undefined]
console.log(Array(1,2)); //[1,2]

在這個例子中參數(shù)數(shù)量的不同其代表的意義不一樣,只有一個參數(shù)時,參數(shù)表示的是長度,大于1一個參數(shù)時表示的元素,會引起混淆,但是Array.of方法就不會存在此問題嗎,因為其參數(shù)始終表示的元素:

console.log(Array.of()); //[]
console.log(Array.of(1)); //[1]
console.log(Array.of(1,2)); //[1,2]

copyWithin 數(shù)組內(nèi)部數(shù)據(jù)復制替換

copyWithin方法主要作用是數(shù)組內(nèi)部值的替換,該方法接受三個參數(shù),分別表示開始復制位置、結(jié)束復制位置和插入位置,示例如下:

[1, 2, 3, 4, 5].copyWithin(0, 3)
// [4, 5, 3, 4, 5]// 將3號位復制到0號位
[1, 2, 3, 4, 5].copyWithin(0, 3, 4)
// [4, 2, 3, 4, 5]
// -2相當于3號位,-1相當于4號位
[1, 2, 3, 4, 5].copyWithin(0, -2, -1)
// [4, 2, 3, 4, 5]
// 將3號位復制到0號位
[].copyWithin.call({length: 5, 3: 1}, 0, 3)
// {0: 1, 3: 1, length: 5}
// 將2號位到數(shù)組結(jié)束,復制到0號位
var i32a = new Int32Array([1, 2, 3, 4, 5]);
i32a.copyWithin(0, 2);
// Int32Array [3, 4, 5, 4, 5]
// 對于沒有部署TypedArray的copyWithin方法的平臺
// 需要采用下面的寫法
[].copyWithin.call(new Int32Array([1, 2, 3, 4, 5]), 0, 3, 4);
// Int32Array [4, 2, 3, 4, 5]

以上所述是小編給大家介紹的ES6中的數(shù)組擴展方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

  • JavaScript設計模式之觀察者模式與發(fā)布訂閱模式詳解

    JavaScript設計模式之觀察者模式與發(fā)布訂閱模式詳解

    這篇文章主要介紹了JavaScript設計模式之觀察者模式與發(fā)布訂閱模式,結(jié)合實例形式詳細分析了JavaScript觀察者模式與發(fā)布訂閱模式相關概念、原理
    2020-05-05
  • JavaScript仿flash遮罩動畫效果

    JavaScript仿flash遮罩動畫效果

    這篇文章主要為大家詳細介紹了JavaScript仿flash遮罩動畫效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • 基于js實現(xiàn)二級下拉聯(lián)動

    基于js實現(xiàn)二級下拉聯(lián)動

    這篇文章主要為大家詳細介紹了基于js實現(xiàn)二級下拉聯(lián)動,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 使用InstantClick.js讓頁面提前加載200ms

    使用InstantClick.js讓頁面提前加載200ms

    本篇文章主要介紹了使用InstantClick.js讓頁面提前加載200ms,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • javascript實現(xiàn)炫酷的拖動分頁

    javascript實現(xiàn)炫酷的拖動分頁

    非??岬膉avascript拖動分頁功能,無縫循環(huán)分頁,拖動鼠標即可完成分頁,鼠標向左拖動回到前一頁,向右拖動則翻開第二頁,還帶有動畫特效,著實很不錯,界面黑色,非主流風格,相信很多人會喜歡的。
    2015-05-05
  • JS表示Stack類練習用棧實現(xiàn)任意進制轉(zhuǎn)換

    JS表示Stack類練習用棧實現(xiàn)任意進制轉(zhuǎn)換

    這篇文章主要為大家介紹了JS表示Stack類練習用棧實現(xiàn)任意進制轉(zhuǎn)換示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • 一個很有趣3D球狀標簽云兼容IE8

    一個很有趣3D球狀標簽云兼容IE8

    一個很有趣的標簽云兼容 IE 8親測可用,不是基于jQuery的,所以不需要引入,下面是具體的代碼實現(xiàn)
    2014-08-08
  • 詳解Javascript中document.execCommand()的用法以及指令參數(shù)列表

    詳解Javascript中document.execCommand()的用法以及指令參數(shù)列表

    execCommand方法是執(zhí)行一個對當前文檔,當前選擇或者給出范圍的命令。在HTML5中,execCommand可以通過JavaScript代碼來調(diào)用,使得開發(fā)者可以在網(wǎng)頁中實現(xiàn)一些復雜的文本操作。在HTML編輯器中這個命令用得很多,酷炫的強大功能。
    2023-07-07
  • 鼠標移到圖片上變大顯示而不是放大鏡效果

    鼠標移到圖片上變大顯示而不是放大鏡效果

    這篇文章主要介紹了通過js實現(xiàn)的,當鼠標移到圖片上變大顯示而不是放大鏡效果,需要的朋友可以參考下
    2014-06-06
  • JavaScript實現(xiàn)左右滾動電影畫布

    JavaScript實現(xiàn)左右滾動電影畫布

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)左右滾動電影畫布,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02

最新評論