ES6的一些筆記(六)

函數(shù)

新特性


新增參數(shù)默認(rèn)值

在寫函數(shù)的時(shí)候可以給形參所在的變量分配一個(gè)默認(rèn)值,如果在調(diào)用函數(shù)的時(shí)候,沒有寫入實(shí)參,那么形參變量中的值就是默認(rèn)值。
默認(rèn)值會(huì)讓functionlength屬性失真,在默認(rèn)值后包含默認(rèn)值的形參將不會(huì)計(jì)入length屬性,并且嚴(yán)格模式不可以使用。

function test(x,y=10) {    
return x + y;
}
console.log(test())   // NaN 因?yàn)閤沒有值 而y是一個(gè)數(shù)字
console.log(test(3,3))  // 6
console.log(test(3));   // 13
新增rest參數(shù)

寫法...vals,vals只是一個(gè)變量名,寫什么都可以,記得放在參數(shù)末尾也就是最后一個(gè)參數(shù),不然會(huì)報(bào)錯(cuò)。
rest參數(shù)就是一個(gè)數(shù)組。嚴(yán)格模式不可以使用。

function testEach(...vals) {    
    vals.forEach(function (val) {        
        console.log(val);    
    })
}
function test(...vals) {    
    for (var val in vals){        
        console.log(vals[val]);    
    }
}
test("呵","呵")   // 呵,呵
testEach(1,2,3,4)  // 1,2,3,4
新增擴(kuò)展運(yùn)算符...

...可以把一個(gè)數(shù)組轉(zhuǎn)化為序列的方式,不止是數(shù)組偽數(shù)組也可以。
嚴(yán)格模式不可以使用。

function test(a,b,c) {    
  return a+b+c;
}
console.log(test(...[1,2,3]));   // 6
函數(shù)的name屬性

name返回的是一個(gè)函數(shù)的名稱

function test() {
}
var arr = new Array();
console.log(test.name)   // test
console.log(arr.push.name)     // push 
函數(shù)的新寫法“箭頭函數(shù)”

箭頭函數(shù)可以簡(jiǎn)化原先函數(shù)的書寫方式,實(shí)例如下。

var myparseInt =  num => Number.parseInt(num)
var n = myparseInt("72b");
console.log(n); // 72

如上代碼num => Number.parseInt(num)相當(dāng)于一個(gè)匿名函數(shù),而myparselnt則相當(dāng)于一個(gè)函數(shù)的名稱,也可以說是一個(gè)變量接收了一個(gè)匿名函數(shù)那么久可以通過這個(gè)變量來調(diào)用函數(shù),匿名函數(shù)如果放到ES5中代碼如下:

var  myparseInt  =function(num) {    
    return Number.parseInt(num)
}

多個(gè)參數(shù)或者沒有參數(shù)可以用()來表示參數(shù)的地方如:

var test=  ()=> "返回值"
//等同于
var  test  =function() {    
    return "返回值"
}

如果返回值大于一條語句要用{}包裹起來。

var test=  (num1,num2)=> {    
    var n = num1 + num2;   
    return n/10;
}
console.log(test(30,40))  // 70

箭頭函數(shù)里面根本沒有自己的this,而是引用外層的this。

function fn() {
    return () =>{
        return () =>{
            return this.name
        }
    }
}

var jack = fn.call({"name":"jack"})

/** 
  獲取的jack
  function () {
        return function () {
            return _this.name;
        };
    }
*/
console.log(jack) 

console.log("---" + jack.name)  // ---
console.log(jack.call()()) // jack
console.log(jack.call({"name":"jack2"})()) // jack
var jack2 =jack.call({"name":"jack2"});
console.log("---" + jack2.name) // ---
/**
  jack2
  function () {
            return _this.name;
  }
*/
console.log(jack2)
console.log(jack2()) // jack

對(duì)象

新特性


對(duì)象屬性的簡(jiǎn)易寫法
// 變量
var name = "jack";
var age = 18;
// 將變量賦值給對(duì)象
var obj = {name};
obj = {age}
console.log(obj) // Object {age: 18} 會(huì)覆蓋上一個(gè)name
obj = {name,age} 
console.log(obj) // Object {name: "jack", age: 18} 這樣就可以不覆蓋了
對(duì)象的方法簡(jiǎn)易寫法(五星好評(píng))
var p = {
    run(){
        console.log("跑");
    }
}
p.run()
屬性名與方法名可以利用表達(dá)式
var n = "name"
var r = "run";

var obj = {
    [n] : "jack",
    [r](){
        return "跑";
    }
}
console.log(obj.name)  // jack
console.log(obj.run()) // 跑
Object.is()

判斷2個(gè)值是否相等

var a = NaN;
var b = NaN;

console.log(Object.is(a,b)) // true
Object.assign()

合并對(duì)象,包含屬性和方法的合并,第一個(gè)參數(shù)是主對(duì)象,后面的是要合并的對(duì)象。

var obj = {};
var car = {
    run(){
        return "跑";
    }
}
var dog = {
    eat(){
        return "吃";
    }
}
Object.assign(obj,car,dog);
console.log(obj.run());  // 跑
console.log(obj.eat());  // 吃
Object的描述對(duì)象Descriptor

Object.getOwnPropertyDescriptor(obj,key)獲取這個(gè)描述對(duì)象

var car = {
    run(){
        return "跑";
    }
}
/**
  描述對(duì)象 enumerable 決定是否是可以在循環(huán)中被遍歷出的屬性
  Object
    configurable: true
    enumerable: true
    value: run()writable: true
    __proto__: Object
*/
console.log(Object.getOwnPropertyDescriptor(car,"run"));
Object.keys(obj)

返回由對(duì)象所有鍵所組成的數(shù)組

var car = {
    run(){
        return "跑";
    }
}
var arr = Object.keys(car)
console.log(arr); //  ["run"];
Object.values(obj)

返回由對(duì)象所有值所組成的數(shù)組,其特性與keys一樣

var test = {name:"test"}
var vals = Object.values(test)

console.log(vals) // ["test"]
Object.entries(obj)

這個(gè)返回值有2種情況,當(dāng)對(duì)象只有一個(gè)鍵值對(duì)的時(shí)候只會(huì)返回一個(gè)一維數(shù)組,0下標(biāo)的是key1下標(biāo)的是val,但是當(dāng)這個(gè)對(duì)象有多個(gè)鍵值對(duì)的時(shí)候,所返回的就是一個(gè)二維數(shù)組,每一個(gè)鍵值對(duì)就是一個(gè)一維數(shù)組.

var test = {name:"test"}
test.age = 12;

var entries = Object.entries(test)

console.log(entries) // [["name","test"],["age",12]]
Object.getOwnPropertyNames(obj)

表面看和keys這個(gè)方法區(qū)別不大,但是如果是enumerable: true描述對(duì)象中的這個(gè)屬性為否在keys中是不可能遍歷出的但是在這里就可以遍歷了

var arr = [1];
arr.name = "數(shù)組";

var keysArr = Object.keys(arr)
var getOwnPropertyNamesArr = Object.getOwnPropertyNames(arr);
console.log(keysArr); // ["0", "name"]
console.log(getOwnPropertyNamesArr) // ["0", "length", "name"]
Reflect.ownKeys(obj)

返回值為數(shù)組,包含所有的key,不論enumerableSymbol

var arr = [1];
arr.name = "數(shù)組";
var keysArr = Reflect.ownKeys(arr)
console.log(keysArr); // ["0", "length", "name"]
Object.setPrototypeOf(obj,proto)

可以設(shè)置對(duì)象中的proto屬性

var car = {
    run(){
        return "跑";
    }
}
console.log(car);
/**
  結(jié)果如下:
Object
run: run()
__proto__:Object
__defineGetter__:__defineGetter__()
__defineSetter__:__defineSetter__()
__lookupGetter__:__lookupGetter__()
__lookupSetter__: __lookupSetter__()
constructor: Object()
hasOwnProperty: hasOwnProperty()
isPrototypeOf:isPrototypeOf()
propertyIsEnumerable:propertyIsEnumerable()
toLocaleString: toLocaleString()
toString: toString()
valueOf: valueOf()
get __proto__: __proto__()
set __proto__: __proto__()
*/


var car = {
    run(){
        return "跑";
    }
}
var test = {name:"test"}
Object.setPrototypeOf(car,test);
console.log(car) 
/**
  Object
      run: run()
      __proto__: Object
          name: "test"
          __proto__: Object
              __defineGetter__:__defineGetter__()
              __defineSetter__:__defineSetter__()
              __lookupGetter__:__lookupGetter__()
              __lookupSetter__: __lookupSetter__()
              constructor: Object()
              hasOwnProperty: hasOwnProperty()
              isPrototypeOf:isPrototypeOf()
         propertyIsEnumerable:propertyIsEnumerable()
              toLocaleString: toLocaleString()
              toString: toString()
              valueOf: valueOf()
              get __proto__: __proto__()
              set __proto__: __proto__()
*/
Object.getPrototypeOf(obj)

取出一個(gè)對(duì)象的proto屬性 和setPrototypeOf對(duì)應(yīng)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,024評(píng)論 3 413
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,285評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,328評(píng)論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,878評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評(píng)論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,098評(píng)論 0 286
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,616評(píng)論 1 331
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,554評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,725評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評(píng)論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 43,971評(píng)論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評(píng)論 1 280
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,339評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,695評(píng)論 2 370

推薦閱讀更多精彩內(nèi)容

  • 1.屬性的簡(jiǎn)潔表示法 允許直接寫入變量和函數(shù) 上面代碼表明,ES6 允許在對(duì)象之中,直接寫變量。這時(shí),屬性名為變量...
    雨飛飛雨閱讀 1,140評(píng)論 0 3
  • 三,字符串?dāng)U展 3.1 Unicode表示法 ES6 做出了改進(jìn),只要將碼點(diǎn)放入大括號(hào),就能正確解讀該字符。有了這...
    eastbaby閱讀 1,552評(píng)論 0 8
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,259評(píng)論 0 4
  • 我們已經(jīng)學(xué)過四季這篇課文。課文內(nèi)容是“草芽尖尖,他對(duì)小鳥說:“我是春天。”荷葉圓圓,他對(duì)青蛙說:“我是夏天。”谷...
    張佳藝我的寶貝閱讀 316評(píng)論 0 2
  • 明天是10月5日,星期三,對(duì)于很多人來說,不過是國(guó)慶小長(zhǎng)假中平凡的一天。但,對(duì)于我來說,這一天到來,帶來的是我與她...
    學(xué)生澤平閱讀 340評(píng)論 0 1