es6新增方法匯總(也包括一些不常用的)

javascript的參考文檔:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript

新增類型

Set

和其他語言的一樣,Set是唯一結構的,無序的集合.沒有索引,可以用來給數組去重.Set默認不做類型轉換.雖然NaN在js中不想等,但Set內部認為他們是相同的.這個應該很好理解.而且同樣沒有索引的概念,這個因該也沒什么異議吧?

方法
add(value):添加一個值,返回Set結構本身
delete(value):刪除某個值炼邀,返回布爾值
has(value):返回布爾值秀存,表示是否是成員
clear():清除所有成員瑞驱,無返回值
keys():返回鍵名的遍歷器
values():返回鍵值的遍歷器
entries():返回鍵值對的遍歷器
forEach():使用回調函數遍歷每個成員
keys,values,entries三個方法其實返回的值是一樣的.

Map

Map應該是一種接近python中的dict的數據結構,和以前不同,這次是一個直接的鍵值對的構造了.而且key的選擇和python一樣寬容.(我估計動態(tài)語言都是這么寬松,只要可以hash的估計都能做key)注意map對象的定義方法,不能直接加參數,而是map = new Map(); 然后map.set(key,val)的方法來設定,注意,這個對象的實例看起來和js原來的字典很像,但并不是一種東西.有一些明顯的差別:

  • 使用JSON.stringify()返回的是{}
  • 有一個size屬性可以知道對象的長度.js的字典對象沒這個方法也沒類似的方法.

目前看來,這個類型還很簡單,倒是map方法很成熟.

Proxy

代理對象.

這個新的類型用處很多,建議之間看參考文檔.https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy

新特性

箭頭函數

就是匿名函數,類似python中的lambda表達式,和lambda表達式不同的是,使用{}的情況下,箭頭函數支持多行代碼.需要注意的是,箭頭函數的this一般指向的是window是不是當前運行函數的對象.

f= x=>x*2+1
f(2)
5
f=(x,y)=>console.log(`${x}+${y}=${x+y}`)
f(2,3)
2+3=5
f=(x,y)=>{console.log(`${x}+${y}=${x+y}`);console.log(`${x}x${y}=${x*y}`);}
f(3,4)
3+4=7
3x4=12
class關鍵字

對類的支持.

   class Person {
        constructor(name, age) {
            // 構造器
            this.name = name;
            this.age = age;
        }
        say_hello() {
            console.log(`my name is ${this.name},I am ${this.age} years old.`);
        }
    }
    let tom = new Person("Tom", 12);
    tom.say_hello();
輸出:my name is Tom,I am 12 years old.

用字面量定義一個對象

human = {
        name: "jack",
        age: 12,
        say_hello() {
            console.log(`my name is ${this.name},I am ${this.age} years old.`);
        }
    };
    human.say_hello();
輸出:my name is jack,I am 12 years old.

原型構造方法.

student = {
        __proto__: human, // 以human為原型,類似類構造器的繼承某個父類
        name: "Smith"
    }
    student.say_hello();
輸出:my name is Smith,I am 12 years old.
字符串模板
student.say_hello();
    let a = "jack",
        b = "tom";
    console.log(`${a} and $`);  // 注意是反引號
輸出:jack and tom
解構

對數組或者字典對象中的元素進行解析賦值.

/*對數組解構賦值*/
    let [a, b, c] = [1, 2, 3];
    console.log(a, b, c);
    /*
    注意不能對集合解構賦值,像下面這樣會報錯的
    let (m, n, j) = (11, 22, 33);
    */
    /*對字典解構賦值*/
    let {
        "name": name
    } = {
        "name": "jack"
    };
    console.log(name);
函數的參數新方法

指定默認值,不定參數和展開序列的魔法函數

 /*參數默認值*/
    function f1(name = "jack") {
        console.log(name);
    }
    f1();
    /*混合帶默認值和不帶默認值的參數*/
    function f11(name = "jack", age = 10, sex) {
        console.log(name, age, sex);
    }
    f11(undefined, undefined, "男");
    輸出:jack 10 男   
    /*不定參數,類似python的*args,使用三個點表示*/
    function f2(...args) {
        console.log(args);  // 輸出 ["name", "age", "sex"]
        console.log(...args);  // 輸出  name age sex
    }
    f2("name", "age", "sex");
    /*類似python的賦值參數的情況*/
    let arg_list = [1, 2, 3, 4];
    f2(..arg_list);
擴展運算符之...

類似python的*展開數組.請看實際代碼

/**傳遞參數,解包數組***/
    let l1 = ["jack", 12, "male"];
    f = (...args) => console.log(...args); // 不定參數格式
    f(...l1); // 相當與f("jack", 12, "male")
    let l2 = [2, 4, 9, 31, 12, 3, 81, 33];
    console.log(Math.max(...l2)); // 求最大值
    console.log(Math.min(...l2)); // 求最小值
    l2.push(...[1, 1, 5, 1.7]); // 連接數組
    console.log(l2);
    let l3 = [...l1, ...l2]; // 合并數組
    console.log(l3);
    console.log(..."world");  // 展開字符串

新函數和新方法

call和apply

這個不是新的,但是要注意一下.
call(obj/func, arg1, arg2,.....) 改變函數執(zhí)行時的上下文(this對象)
第一個參數是一個函數(或者對象的函數)
第二個到...n個是func的函數.

    class Person {
        constructor(name, age) {
            // 構造器
            this.name = name;
            this.age = age;
        }
        say_hello() {
            console.log(`my name is ${this.name},I am ${this.age} years old.`);
        }
        explain_array(arg1, arg2, arg3) {
            console.log(arguments); // 內置參數
            console.log(`arg1=${arg1}; arg2=${arg2}; arg3=${arg3}`);
        }
    }
    /*call的演示*/
    let p1 = new Person("張三", 12);
    let p2 = new Object();
    p2.name = "李四";
    p2.age = 22;
    p1.say_hello.call(p2);
    輸出:my name is 李四,I am 22 years old.
    /*
    實際上是用p2替換了p1(改變了函數執(zhí)行時的this對象);
    p2對象并沒有say_hello這個方法.
    */
    /*
    *apply的演示,還有apply和call的對比,兩則只是傳遞參數的方法的差別:
    * call是順序傳遞.apply需要一個數組.
    */
    let p3 = new Object();
    p3.name = "王五";
    p3.age = 33;
    p1.explain_array("a", "b", "c");
    p1.explain_array.call(p3, "a", "b", "c");
    p1.explain_array.apply(p3, ["a", "b", "c"]);
lastIndexOf

查找索引

lastIndexOf(key, from)

key需要查找的對象.
form從那個索引開始向前查找.
return 返回第一次查找到key的值對應的索引
和indexOf相反的方法,反序查找一個對象.返回從索引或者-1,注意.無論lastIndexOf還是indexOf,索引都是從數組的頭部開始計算的.下面距離說明:

[1,2,3,4,4.5,5,1,7].lastIndexOf(1,3);
返回的是0, 因為數組第三元素3之前之有0這個索引的值等于1,
[1,2,1,3,4,4.5,5,1,7].lastIndexOf(1,3)
返回的是2, 因為數組第三元素3之前之有2這個索引的值等于1,
forEach方法

循環(huán)數組

forEach(func, new_this)

func 回調函數,不一定有返回值.
new_this可以用這個參數重新定義this指向.
其中.回調函數func有三個參數.
function(value, index, array){}
value是當前循環(huán)的值,
index是當前索引.
array是數組對象本身.

["a","b","c"].forEach(function(value,index,array){console.log(`No.${index} value=${value} in ${array}`);});
No.0 value=a in a,b,c
No.1 value=b in a,b,c
No.2 value=c in a,b,c
for...in和for...of

循環(huán)數組,

這兩個方法放一起是為了比較,in循環(huán)的是索引,of循環(huán)的是元素.
另外,for...of可以循環(huán)字符串,Set,Map和以前的字典對象(其實是Object對象).

// for...of 解析Map對象.注意,只有Map才可以使用解構(destructuring)來將鍵值對拆解為兩個獨立的變量
for(let [k,v] of map){console.log(`${k}:${v}`);}
name:jack
age:12
// for...of 解析 dict對象.
for(let k of Object.keys(d)){console.log(`${k}=${d[k]}`);}
name=tom
age=14
// for...of解析數組.
for(let i of l){console.log(i);}
jack
 tom
John
//for...in解析數組
for(let i in l){console.log(i);}
 0
1
2
map

映射,這個方法和python的map基本上是同一個意思.

array.map(func,newthis)
func 回調函數,必須有返回值,
newthis 如果你要固定this對象,請使用這個參數.
其中.回調函數func有三個參數.
function(value, index, array){}
value是當前循環(huán)的值,
index是當前索引.
array是數組對象本身.

l = ["jack", "tom", "John"];
l.map(function(a,b,c){console.log(`${a}||$俭厚||${c}`);})
jack||0||jack,tom,John
tom||1||jack,tom,John
John||2||jack,tom,John
filter

過濾器,同上,這個方法和python的filter基本上是同一個意思.(話說javascript和python越來越像了,不,好像動態(tài)語言都越來越像了,大家都在進步嘛,呵呵)

array.filter(func,newthis)
func 過濾函數,必須返回布爾值,
newthis 如果你要固定this對象,請使用這個參數.
其中.回調函數func有三個參數.
function(value, index, array){}
value是當前循環(huán)的值,
index是當前索引.
array是數組對象本身.

// 返回數組中的偶數
l = [1,2,3];
l.filter(function(item){if(item%2===0){return 1;}else{return 0;}});
[2]
every

判斷函數,序列中每一個都滿足判斷條件就返回真值.

array.every(func)
func 判斷函數,必須返回布爾值,
其中.回調函數func有三個參數.
function(value, index, array){}
value是當前循環(huán)的值,
index是當前索引.
array是數組對象本身.

// 判斷數組元素是否都是數字?
l = [1,2,3,4];
l.every(function(item){return !isNaN(item);})
true
some

判斷函數,序列中只要一個都滿足判斷條件就返回真值.

array.some(func)
func 判斷函數,必須返回布爾值,
其中.回調函數func有三個參數.
function(value, index, array){}
value是當前循環(huán)的值,
index是當前索引.
array是數組對象本身.

// 判斷數組元素是否都是數字?
l = [1,"a",3,4];
l.some(function(item){return !isNaN(item);})
false
reduce

化簡函數, 從左到右依次處理序列中的元素,并返回結果

array.reduce(func),從0索引開始,依次把元素相加,結果再作為下一個迭代的第一個參數.為了便于理解,我們這樣定義一下加法:
加數1+加數2=結果.
func有三個參數.
function(value1, value2, index){}
value1是當前迭代中的加數1,也是上一次迭代的返回值.
value2是當前迭代中的加數2,
index是當前迭代中加數2的索引.
return 函數處理的結果.

很顯然,這個函數是用來做累加計算的.

// 累加計算
l = [11, 22, 33, 44, 55, 66]
l.reduce(function(a,b,c){console.log(`加數1=${a}, 加數1=$账月, 索引=${c}`); return (a+b) + 1000;});
加數1=11, 加數1=22, 索引=1
加數1=1033, 加數1=33, 索引=2
加數1=2066, 加數1=44, 索引=3
加數1=3110, 加數1=55, 索引=4
加數1=4165, 加數1=66, 索引=5
5231   // 最終的處理結果.
reduceRight

化簡函數, 從右到左依次處理序列中的元素,并返回結果,這基本就是reduce的反函數.

array.reduceRight(func),從0索引開始,依次把元素相加,結果再作為下一個迭代的第一個參數.為了便于理解,我們這樣定義一下加法:
加數1+加數2=結果.
func有三個參數.
function(value1, value2, index){}
value1是當前迭代中的加數1,也是上一次迭代的返回值.
value2是當前迭代中的加數2,
index是當前迭代中加數2的索引.
return 函數處理的結果.

同reduce,這個函數是用來做累加計算的.

// 累加
l = [11, 22, 33, 44, 55, 66]
l.reduceRight(function(a,b,c){console.log(`加數1=${a}, 加數1=$蟆沫, 索引=${c}`); return (a+b) + 1000;});
加數1=66, 加數1=55, 索引=4
加數1=1121, 加數1=44, 索引=3
加數1=2165, 加數1=33, 索引=2
加數1=3198, 加數1=22, 索引=1
加數1=4220, 加數1=11, 索引=0
5231   // 最終的處理結果.
箭頭函數

是一種簡化的匿名函數的書寫方式,并且在一開始就會鎖定內部的this對象,下面會做一些箭頭函數的演示來說明問題:


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蛾洛,隨后出現(xiàn)的幾起案子养铸,更是在濱河造成了極大的恐慌,老刑警劉巖轧膘,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钞螟,死亡現(xiàn)場離奇詭異,居然都是意外死亡谎碍,警方通過查閱死者的電腦和手機鳞滨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蟆淀,“玉大人太援,你說我怎么就攤上這事“獍” “怎么了提岔?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長笋敞。 經常有香客問我碱蒙,道長,這世上最難降的妖魔是什么夯巷? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任赛惩,我火速辦了婚禮,結果婚禮上趁餐,老公的妹妹穿的比我還像新娘喷兼。我一直安慰自己,他們只是感情好后雷,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布季惯。 她就那樣靜靜地躺著吠各,像睡著了一般。 火紅的嫁衣襯著肌膚如雪勉抓。 梳的紋絲不亂的頭發(fā)上贾漏,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機與錄音藕筋,去河邊找鬼纵散。 笑死,一個胖子當著我的面吹牛隐圾,可吹牛的內容都是我干的伍掀。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼暇藏,長吁一口氣:“原來是場噩夢啊……” “哼硕盹!你這毒婦竟也來了?” 一聲冷哼從身側響起叨咖,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤瘩例,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后甸各,有當地人在樹林里發(fā)現(xiàn)了一具尸體垛贤,經...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年趣倾,在試婚紗的時候發(fā)現(xiàn)自己被綠了聘惦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡儒恋,死狀恐怖善绎,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情诫尽,我是刑警寧澤禀酱,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站牧嫉,受9級特大地震影響剂跟,放射性物質發(fā)生泄漏。R本人自食惡果不足惜酣藻,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一曹洽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辽剧,春花似錦送淆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辟拷。三九已至,卻和暖如春环凿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背放吩。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工智听, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人渡紫。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓到推,卻偏偏與公主長得像,于是被迫代替她去往敵國和親惕澎。 傳聞我的和親對象是個殘疾皇子莉测,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內容

  • Javascript有很多數組的方法,有的人有W3C的API唧喉,還可以去MDN上去找捣卤,但是我覺得API上說的不全,M...
    頑皮的雪狐七七閱讀 4,088評論 0 6
  • 由于最近都在freecodecamp上刷代碼八孝,運用了很多JavaScript數組的方法董朝,因此做了一份關于JavaS...
    2bc5f46e925b閱讀 1,979評論 0 16
  • ??引用類型的值(對象)是引用類型的一個實例子姜。 ??在 ECMAscript 中,引用類型是一種數據結構楼入,用于將數...
    霜天曉閱讀 1,058評論 0 1
  • 數組是一種可變的哥捕、可索引的數據集合。在Scala中用Array[T]的形式來表示Java中的數組形式 T[]嘉熊。 v...
    時待吾閱讀 953評論 0 0
  • 本文總結了數組所有的方法遥赚。 1. 檢測對象是不是數組 instanceof操作符 Array.isArray()方...
    胡不歸vac閱讀 683評論 0 1