1. 程式人生 > >關於陣列以及物件一些api的註解和使用

關於陣列以及物件一些api的註解和使用

  1. 陣列
  • arr.join(“連線符”)

作用:用連線符把數組裡面的元素連線成字串;

注意:arr.join("")能無縫連線,即將陣列轉化為字串。

  • arr.concat("a","b",arr1)

作用:進行拼接

注意:Ⅰ不會修改原陣列,返回新陣列。

Ⅱconcat方法中的陣列會被打散為單個元素再拼接。

舉例:

var arr=['0'];

var arrConcat=arr.concat('1','2',[‘3’,’4’]);

console.log(arr);//輸出結果為[‘0’]

console.log(arrConcat);//輸出結果為["0", "1", "2", "3","4"]

  • arr.slice(start[,end])

作用:從下標start開始擷取到end-1

注意:Ⅰend是可選的,若end缺失,表示擷取到陣列的最後一個元素

Ⅱ支援負數,表示倒數第幾個,start永遠小於end

Ⅲ不會修改元素組,返回新陣列

舉例:

var arr=["1","2","3","4","5","6"];

var arrSlice1=arr.slice(0,3);

var arrSlice2=arr.slice(-3,-1);

console.log(arr);//輸出結果為["1", "2", "3", "4", "5", "6"]

console.log(arrSlice1);//輸出結果為["1", "2", "3"]

console.log(arrSlice2);//輸出結果為["4", "5"]

  • arr.splice(start,n[,value1,value2...])

作用:從start開始刪除插入或替換陣列的n個元素

注意: Ⅰstart是必須的,表示操作的開始,n也是必須的,表示操作 的 個數,start可以是負數

Ⅱ原陣列會被修改

Ⅲ返回被刪除的陣列,若n=0,返回陣列為[]

舉例:

Ⅰ刪除

var arr=["1","2","3","4","5","6"];

var arrSplice1=arr.splice(2,2);

console.log(arr);//輸出結果為["1", "2", "5", "6"]

console.log(arrSplice1);//輸出結果為["3", "4"]

Ⅱ插入--n=0就可以了

var arr=["1","2","3","4","5","6"];

var arrSplice2=arr.splice(2,0,7,8);

console.log(arr);//輸出結果為["1", "2", 7, 8, "3", "4", "5", "6"]

console.log(arrSplice2);//輸出結果為[]

Ⅲ替換--刪除後面加上替換的資料

var arr=["1","2","3","4","5","6"];

var arrSplice3=arr.splice(2,3,7,8,9);

console.log(arr);//輸出結果為["1", "2", 7, 8, 9, "6"]

console.log(arrSplice3);//輸出結果為["3", "4", "5"]

  • arr.reverse()

作用:翻轉陣列

注意:直接修改原陣列

舉例:

var arr=["1","2","3","4","5"];

Var arrReverse=arr.reverse();

console.log(arr);//輸出結果為[ "5", "4", "3", "2", "1"]

console.log(arrReverse);//輸出結果為[ "5", "4", "3", "2", "1"]

  • arr.sort()

作用:陣列排序

注意: Ⅰ直接修改原陣列

Ⅱ預設根據陣列元素的第一位ASCII碼值升序(從小到大)排列

Ⅲ可以使用比較器函式來控制升降序,只限陣列中是數字或者數字字串

升序:arr.sort(function(a,b){return a-b;});

降序:arr.sort(function(a,b){return b-a;});

Ⅳ隨機打亂陣列,陣列可以是任意的型別

arr.sort(function(){return Math.random()>.5 ? 1 : -1;});

舉例:

  • arr.indexOf(value[,from])或arr.lastIndexOf(value[,from])

作用:查詢value元素在陣列中的位置

注意:Ⅰ如果存在就返回陣列元素的下標,如果不存在就返回-1

ⅡlastIndexOf是當有多個的時候返回最後一個,indexOf如果有   多個的時候返回的是第一個

舉例:

var beasts = ['ant', 'bison', 'camel', 'duck', 'bison'];

console.log(beasts.indexOf('bison'));// 輸出為1

console.log(beasts.indexOf('bison', 2));// 輸出為4

console.log(beasts.indexOf('giraffe'));// 輸出為-1

console.log(beasts.lastIndexOf('bison'));//輸出為4

  • arr.some(function(value,index,arr){ //do Something})

作用:判斷是否有符合的元素,只要遇到符合條件的就退出迴圈

注意:Ⅰ返回的是boolean值

Ⅱvalue是指每個陣列元素值,index是指下標

Ⅲ如果函式中沒有return,返回的一定是false

舉例:

var arr=["1","2","3","4","5","6"];

var arrSome1=arr.some(function(value,index,arr){

if(value%2){return value}

});

console.log(arrSome1);//輸出true

var arrSome2=arr.some(function(value,index,arr){

if(value%2){

console.log(index)//輸出0,2,4

}

});

console.log(arrSome2);//輸出false

var arrSome3=arr.some(function(value,index,arr){

return value>5});

console.log(arrSome3);//輸出true

  • arr.every(function(value,index,arr){//do Something})

作用:判斷陣列元素是否否符合條件

注意:Ⅰ返回的是boolean值

Ⅱ如果函式中沒有return,返回的一定是false

舉例:

var arr=["1","2","3","4","5","6"];

var arrEvery=arr.every(function(value,index,arr){

return value%2});

console.log(arrEvery);//輸出false

  • arr.filter(function(value,index,arr){//do Something})

作用:過濾陣列,返回符合條件的元素組成的新陣列。

注意:Ⅰ不會改變原陣列

舉例:

var arr=["1","2","3","4","5","6"];

var arrFilter=arr.filter(function(value,index,arr){

return value%2});

console.log(arrFilter);//輸出["1", "3", "5"]

console.log(arr);//輸出["1", "2", "3", "4", "5", "6"]

  • arr.forEach(function(value,index,arr){})

作用:迴圈陣列,沒有返回值

注意:

舉例:

  • arr.map(function(value,index,arr){})

作用:迴圈陣列,沒有返回值

注意:

舉例:

  • arr.reduce(function(pre,value,index,arr){return pre + value;})

作用:彙總所有陣列元素的和

注意:Ⅰpre是指前面所有元素的和

Ⅱ一定要有return

Ⅲ如果是return pre,則只會返回1

舉例:

var arr=[1,2,3,4,5,6];

var arrReduce=arr.reduce(function(pre,value,index,arr){

return pre+value});

console.log(arrReduce);//輸出21

  • String(arr)或arr.toString()

作用:將陣列中的元素用逗號連線成字串,類似於arr.join(",")。

注意:

舉例:

  • arr.unshift(value)

作用:在陣列的最開頭插入元素。

注意:Ⅰ修改原陣列

Ⅱ返回新陣列的length

舉例:

var arr=[1,2,3,4,5,6];

var arrUnshift=arr.unshift(0);

console.log(arr);//輸出[0, 1, 2, 3, 4, 5, 6]

console.log(arrUnshift);//輸出7

  • arr.shift()

作用:彈出陣列最開頭的元素

注意:Ⅰ修改原陣列

Ⅱ返回被彈出的元素

舉例:

var arr=[1,2,3,4,5,6];

var arrShift=arr.shift();

console.log(arr);//輸出[2, 3, 4, 5, 6]

console.log(arrShift);//輸出1

  • arr.push(value1[,value2,arr1])

作用:在陣列末尾追加元素

注意:Ⅰ修改原陣列。

Ⅱ返回新陣列的length

Ⅲ追加進去的陣列不會被打散

舉例:

var arr=[1,2,3,4,5,6];

var arrPush=arr.push(0,[1,2]);

console.log(arr);//輸出[1, 2, 3, 4, 5, 6, 0, [1,2]]

console.log(arrPush);//輸出8

  • arr.pop()

作用:彈出陣列最末尾的元素

注意:Ⅰ修改原陣列

Ⅱ返回被彈出的元素

舉例:

var arr=[1,2,3,4,5,6];

var arrPop=arr.pop();

console.log(arr);//輸出[1, 2, 3, 4, 5]

console.log(arrPop);//輸出6

  1. 陣列
  • arr.join(“連線符”)

作用:用連線符把數組裡面的元素連線成字串;

注意:arr.join("")能無縫連線,即將陣列轉化為字串。

  • arr.concat("a","b",arr1)

作用:進行拼接

注意:Ⅰ不會修改原陣列,返回新陣列。

Ⅱconcat方法中的陣列會被打散為單個元素再拼接。

舉例:

var arr=['0'];

var arrConcat=arr.concat('1','2',[‘3’,’4’]);

console.log(arr);//輸出結果為[‘0’]

console.log(arrConcat);//輸出結果為["0", "1", "2", "3","4"]

  • arr.slice(start[,end])

作用:從下標start開始擷取到end-1

注意:Ⅰend是可選的,若end缺失,表示擷取到陣列的最後一個元素

Ⅱ支援負數,表示倒數第幾個,start永遠小於end

Ⅲ不會修改元素組,返回新陣列

舉例:

var arr=["1","2","3","4","5","6"];

var arrSlice1=arr.slice(0,3);

var arrSlice2=arr.slice(-3,-1);

console.log(arr);//輸出結果為["1", "2", "3", "4", "5", "6"]

console.log(arrSlice1);//輸出結果為["1", "2", "3"]

console.log(arrSlice2);//輸出結果為["4", "5"]

  • arr.splice(start,n[,value1,value2...])

作用:從start開始刪除插入或替換陣列的n個元素

注意: Ⅰstart是必須的,表示操作的開始,n也是必須的,表示操作 的 個數,start可以是負數

Ⅱ原陣列會被修改

Ⅲ返回被刪除的陣列,若n=0,返回陣列為[]

舉例:

Ⅰ刪除

var arr=["1","2","3","4","5","6"];

var arrSplice1=arr.splice(2,2);

console.log(arr);//輸出結果為["1", "2", "5", "6"]

console.log(arrSplice1);//輸出結果為["3", "4"]

Ⅱ插入--n=0就可以了

var arr=["1","2","3","4","5","6"];

var arrSplice2=arr.splice(2,0,7,8);

console.log(arr);//輸出結果為["1", "2", 7, 8, "3", "4", "5", "6"]

console.log(arrSplice2);//輸出結果為[]

Ⅲ替換--刪除後面加上替換的資料

var arr=["1","2","3","4","5","6"];

var arrSplice3=arr.splice(2,3,7,8,9);

console.log(arr);//輸出結果為["1", "2", 7, 8, 9, "6"]

console.log(arrSplice3);//輸出結果為["3", "4", "5"]

  • arr.reverse()

作用:翻轉陣列

注意:直接修改原陣列

舉例:

var arr=["1","2","3","4","5"];

Var arrReverse=arr.reverse();

console.log(arr);//輸出結果為[ "5", "4", "3", "2", "1"]

console.log(arrReverse);//輸出結果為[ "5", "4", "3", "2", "1"]

  • arr.sort()

作用:陣列排序

注意: Ⅰ直接修改原陣列

Ⅱ預設根據陣列元素的第一位ASCII碼值升序(從小到大)排列

Ⅲ可以使用比較器函式來控制升降序,只限陣列中是數字或者數字字串

升序:arr.sort(function(a,b){return a-b;});

降序:arr.sort(function(a,b){return b-a;});

Ⅳ隨機打亂陣列,陣列可以是任意的型別

arr.sort(function(){return Math.random()>.5 ? 1 : -1;});

舉例:

  • arr.indexOf(value[,from])或arr.lastIndexOf(value[,from])

作用:查詢value元素在陣列中的位置

注意:Ⅰ如果存在就返回陣列元素的下標,如果不存在就返回-1

ⅡlastIndexOf是當有多個的時候返回最後一個,indexOf如果有   多個的時候返回的是第一個

舉例:

var beasts = ['ant', 'bison', 'camel', 'duck', 'bison'];

console.log(beasts.indexOf('bison'));// 輸出為1

console.log(beasts.indexOf('bison', 2));// 輸出為4

console.log(beasts.indexOf('giraffe'));// 輸出為-1

console.log(beasts.lastIndexOf('bison'));//輸出為4

  • arr.some(function(value,index,arr){ //do Something})

作用:判斷是否有符合的元素,只要遇到符合條件的就退出迴圈

注意:Ⅰ返回的是boolean值

Ⅱvalue是指每個陣列元素值,index是指下標

Ⅲ如果函式中沒有return,返回的一定是false

舉例:

var arr=["1","2","3","4","5","6"];

var arrSome1=arr.some(function(value,index,arr){

if(value%2){return value}

});

console.log(arrSome1);//輸出true

var arrSome2=arr.some(function(value,index,arr){

if(value%2){

console.log(index)//輸出0,2,4

}

});

console.log(arrSome2);//輸出false

var arrSome3=arr.some(function(value,index,arr){

return value>5});

console.log(arrSome3);//輸出true

  • arr.every(function(value,index,arr){//do Something})

作用:判斷陣列元素是否否符合條件

注意:Ⅰ返回的是boolean值

Ⅱ如果函式中沒有return,返回的一定是false

舉例:

var arr=["1","2","3","4","5","6"];

var arrEvery=arr.every(function(value,index,arr){

return value%2});

console.log(arrEvery);//輸出false

  • arr.filter(function(value,index,arr){//do Something})

作用:過濾陣列,返回符合條件的元素組成的新陣列。

注意:Ⅰ不會改變原陣列

舉例:

var arr=["1","2","3","4","5","6"];

var arrFilter=arr.filter(function(value,index,arr){

return value%2});

console.log(arrFilter);//輸出["1", "3", "5"]

console.log(arr);//輸出["1", "2", "3", "4", "5", "6"]

  • arr.forEach(function(value,index,arr){})

作用:迴圈陣列,沒有返回值

注意:

舉例:

  • arr.map(function(value,index,arr){})

作用:迴圈陣列,沒有返回值

注意:

舉例:

  • arr.reduce(function(pre,value,index,arr){return pre + value;})

作用:彙總所有陣列元素的和

注意:Ⅰpre是指前面所有元素的和

Ⅱ一定要有return

Ⅲ如果是return pre,則只會返回1

舉例:

var arr=[1,2,3,4,5,6];

var arrReduce=arr.reduce(function(pre,value,index,arr){

return pre+value});

console.log(arrReduce);//輸出21

  • String(arr)或arr.toString()

作用:將陣列中的元素用逗號連線成字串,類似於arr.join(",")。

注意:

舉例:

  • arr.unshift(value)

作用:在陣列的最開頭插入元素。

注意:Ⅰ修改原陣列

Ⅱ返回新陣列的length

舉例:

var arr=[1,2,3,4,5,6];

var arrUnshift=arr.unshift(0);

console.log(arr);//輸出[0, 1, 2, 3, 4, 5, 6]

console.log(arrUnshift);//輸出7

  • arr.shift()

作用:彈出陣列最開頭的元素

注意:Ⅰ修改原陣列

Ⅱ返回被彈出的元素

舉例:

var arr=[1,2,3,4,5,6];

var arrShift=arr.shift();

console.log(arr);//輸出[2, 3, 4, 5, 6]

console.log(arrShift);//輸出1

  • arr.push(value1[,value2,arr1])

作用:在陣列末尾追加元素

注意:Ⅰ修改原陣列。

Ⅱ返回新陣列的length

Ⅲ追加進去的陣列不會被打散

舉例:

var arr=[1,2,3,4,5,6];

var arrPush=arr.push(0,[1,2]);

console.log(arr);//輸出[1, 2, 3, 4, 5, 6, 0, [1,2]]

console.log(arrPush);//輸出8

  • arr.pop()

作用:彈出陣列最末尾的元素

注意:Ⅰ修改原陣列

Ⅱ返回被彈出的元素

舉例:

var arr=[1,2,3,4,5,6];

var arrPop=arr.pop();

console.log(arr);//輸出[1, 2, 3, 4, 5]

console.log(arrPop);//輸出6

2.物件

  • 建立物件的兩種方式

Ⅰ:var o = new Object()

Ⅱ:var o = {}; // 推薦,但其實兩者沒有什麼區別

  • Object構造器的成員

Object.protoType

注意:該屬性是所有物件的原型(包括 Object物件本身),語言中

的其他物件正是通過對該屬性上新增東西來實現它們之間的繼

承關係的。所以要小心使用。

舉例:

var str= new String('ObjectTest');

var strObj={'str':'ObjectTest'};

Object.prototype.custom = 1;

console.log(str);//輸出結果如圖

console.log(strObj);//輸出結果如圖

  • Object.prototype 的成員

最基礎的:

Ⅰ:Object.prototype.constructor

 作用:指向用來構造該函式物件的構造器

舉例:①Object.prototype.constructor === Object; // true

②var o = new Object();

o.constructor === Object; // true

Ⅱ:Object.prototype.toString(radix)

作用:該方法返回的是一個用於描述目標物件的字串。

注意:當目標是一個Number物件時,可以傳遞一個用於進位制數的引數radix,該引數radix,該引數的預設值為10(即可以進行數制的轉換)。

舉例:①var o = {prop:1};

o.toString(); // '[object Object]'

②var n = new Number(255);

n.toString(); // '255'

n.toString(16); // 'ff'

console.log(typeof(n.toString(16)));//string

console.log((parseInt(n.toString(16))));//NaN

console.log(parseInt(n.toString(2)));//11111111

Ⅲ:Object.prototype.toLocaleString()

與toString的功能一樣,但是一些物件會做本地化的處理。

另外可以使用navigator.language來了解當前所使用的語言。

Ⅳ:Object.prototype.valueOf()

作用:該方法返回的是用基本型別所表示的this值

注意:如果可以用基本型別表示的話。比如Number物件返回的是它的基   本數值,而Date物件返回的是一個時間戳(timestamp)。如果   無法用基本資料型別表示,該方法會返回this本身。

舉例:①var o = {};

console.log(typeof o.valueOf());//object

Console.log(o.valueOf());//{}

console.log(o.valueOf() === o);//true

②var n = new Number(101);

console.log(typeof n);//object

console.log(typeof n.valueOf);//function

console.log(typeof (n.valueOf()));//number

③var d = new Date();

typeof d.valueOf(); // 'number'

d.valueOf(); // 1542009185998

Ⅴ:Object.prototype.hasOwnProperty(prop)

作用:該方法僅在目標屬性為物件自身屬性時返回true,而當該屬性是   從原型鏈中繼承而來或根本不存在時,返回false。

舉例:var o = {prop:1};

o.hasOwnProperty('prop'); // true

o.hasOwnProperty('toString'); // false

o.hasOwnProperty('formString'); // false

Ⅵ:Object.prototype.isPrototypeOf(obj)

作用:如果目標物件是當前物件的原型,該方法就會返回true.

注意:並不侷限與它的直系關係。

舉例:var s = new String('');

Object.prototype.isPrototypeOf(s); // true

String.prototype.isPrototypeOf(s); // true

Array.prototype.isPrototypeOf(s); // false

Ⅶ:Object.prototype.propertyIsEnumerable(prop)

作用:如果目標屬效能在for in迴圈中被顯示出來,該方法就返回true

舉例:var a = [1,2,3];

a.propertyIsEnumerable('length'); // false

a.propertyIsEnumerable(0); // true

ES5:

Ⅰ:屬性描述符

作用:value——當試圖獲取屬性時所返回的值。

writable——該屬性是否可寫。

enumerable——該屬性在for in迴圈中是否會被列舉

configurable——該屬性是否可被刪除。

set()——該屬性的更新操作所呼叫的函式。

get()——獲取屬性值時所呼叫的函式。

注意:資料描述符(其中屬性為:enumerable,configurable,value,   writable)與存取描述符(其中屬性為enumerable,configurable,   set(),get())之間是有互斥關係的。在定義了set()和get()之   後,描述符會認為存取操作已被 定義了,其中再定義value和   writable會引起錯誤。

舉例:①ES3風格

var person = {};

person.legs = 2;

②資料描述符

var person = {};

Object.defineProperty(person, 'legs', {

    value: 2,

    writable: true,

    configurable: true,

    enumerable: true

});

console.log(person.legs);//2

③儲存描述符--防止別人篡改屬性就必須使用儲存描述符

var person = {};

Object.defineProperty(person, 'legs', {

    set:function(v) {

        return this.value = v;

    },

    get: function(v) {

        return this.value;

    },

    configurable: true,

    enumerable: true

});

person.legs = 2;

Ⅱ:Object.defineProperty(obj, prop, descriptor)

Object.defineProperties(obj, props)

作用:定義一個或多個物件

舉例:①定義一個見上一條

  ②var glass = Object.defineProperties({'test':'test'}, {

    'color': {

        value: 'transparent',

        writable: true

    },

    'fullness': {

        value: 'half',

        writable: false

    }

});

console.log(glass.fullness);//half

console.log(glass.test);//test

Ⅲ:Object.getPrototypeOf(obj)

作用:輸出某個物件的原型

注意:Object的原型為null

舉例:

Object.getPrototypeOf([]) === Array.prototype; // true

Object.getPrototypeOf(Array.prototype)===Object.prototype; // true

Object.getPrototypeOf(Object.prototype) === null; // true

Ⅳ:Object.create(obj, descr)

作用:該方法主要用於建立一個新物件,併為其設定原型。

舉例:

var parent = {hi: 'Hello'};

var o = Object.create(parent, {

    prop: {

        value: 1

    }

});

o.hi; // 'Hello'

// 獲得它的原型

Object.getPrototypeOf(parent) === Object.prototype; // true 說明parent的原型是Object.prototype

Object.getPrototypeOf(o); // {hi: "Hello"} // 說明o的原型是{hi: "Hello"}

o.hasOwnProperty('hi'); // false 說明hi是原型上的

o.hasOwnProperty('prop'); // true 說明prop是原型上的自身上的屬性。

Ⅴ:Object.getOwnPropertyDesciptor(obj, property)

作用:該方法可以讓我們詳細檢視一個屬性的定義。

注意:甚至可以通過它一窺那些內建的,之前不可見的隱藏屬性。

舉例:

Object.getOwnPropertyDescriptor(Object.prototype, 'toString');

// {writable: true, enumerable: false, configurable: true, value: ƒ toString()}

Ⅵ:Object.getOwnPropertyNames(obj)

作用:該方法返回一個數組,其中包含了當前物件所有屬性的名稱(字  符串)。

注意:不論它們是否可列舉。當然,也可以用Object.keys()來單獨返 回可列舉的屬性。

舉例:

Object.getOwnPropertyNames(Object);

// ["length", "name", "arguments", "caller", "prototype", "assign", "getOwnPropertyDescriptor", "getOwnPropertyDescriptors", "getOwnPropertyNames", "getOwnPropertySymbols", "is", "preventExtensions", "seal", "create", "defineProperties", "defineProperty", "freeze", "getPrototypeOf", "setPrototypeOf", "isExtensible", "isFrozen", "isSealed", "keys", "entries", "values"]

Ⅶ:Object.preventExtensions(obj)

作用:用於禁止向某一物件新增更多屬性。

舉例:

var deadline = {};

Object.preventExtensions(deadline);

Object.isExtensible(deadline); // false

Ⅷ:Object.isExtensible(obj)

作用:則用於檢查某物件是否還可以被新增屬性。

舉例:

var deadline = {};

Object.isExtensible(deadline); // true

deadline.date = 'yesterday'; // 'yesterday'

Ⅸ:Object.seal(obj) Object.isSeal(obj)

作用:seal()方法可以讓一個物件密封,並返回被密封后的物件。

seal()方法的作用與preventExtensions()基本相同,但除此之外,它還會將現有屬性

舉例:

var person = {legs:2};

// person === Object.seal(person); // true

Object.isSealed(person); // true

Object.getOwnPropertyDescriptor(person, 'legs');

// {value: 2, writable: true, enumerable: true, configurable: false}

delete person.legs; // false (不可刪除,不可配置)

Object.defineProperty(person, 'legs',{value:2});

person.legs; // 2

person.legs = 1;

person.legs; // 1 (可寫)

Object.defineProperty(person, "legs", { get: function() { return "legs"; } });

// 丟擲TypeError異常

Ⅹ:Object.freeze(obj) Object.isFrozen(obj)

作用:freeze()方法用於執行一切不受seal()方法限制的屬性值變更。Object.freeze() 方法可以凍結一個物件

注意:凍結指的是不能向這個物件新增新的屬性,不能修改其已有屬性的值,不能刪除已有屬性,以及不能修改該物件已有屬性的可列舉性、可配置性、可寫性。也就是說,這個物件永遠是不可變的。該方法返回被凍結的物件。

舉例:

var deadline = Object.freeze({date: 'yesterday'});

deadline.date = 'tomorrow';

deadline.excuse = 'lame';

deadline.date; // 'yesterday'

deadline.excuse; // undefined

Object.isSealed(deadline); // true;

Object.isFrozen(deadline); // true

Object.getOwnPropertyDescriptor(deadline, 'date');

// {value: "yesterday", writable: false, enumerable: true, configurable: false} (不可配置,不可寫)

Object.keys(deadline); // ['date'] (可列舉)

Ⅺ:Object.keys(obj)

作用:該方法是一種特殊的for-in迴圈。它只返回當前物件的屬性(不像for-in)

注意:而且這些屬性也必須是可列舉的(這點和Object.getOwnPropertyNames()不同,不論是否可以列舉)。返回值是一個字串陣列。

舉例:

Object.prototype.customProto = 101;

Object.getOwnPropertyNames(Object.prototype);

// [..., "constructor", "toLocaleString", "isPrototypeOf", "customProto"]

Object.keys(Object.prototype); // ['customProto']

var o = {own: 202};

o.customProto; // 101

Object.keys(o); // ['own']

ES6:

Ⅰ:Object.is(value1, value2)

作用:該方法用來比較兩個值是否嚴格相等。它與嚴格比較運算子(===)的行為基本一致

注意:一是+0不等於-0,二是NaN等於自身。

舉例:

Object.is('xuanyuan', 'xuanyuan'); // true

Object.is({},{}); // false

Object.is(+0, -0); // false

+0 === -0; // true

Object.is(NaN, NaN); // true

NaN === NaN; // false

Ⅱ:Object.assign(target, ...sources)

作用:該方法用來源物件(source)的所有可列舉的屬性複製到目標物件(target)

注意:它至少需要兩個物件作為引數,第一個引數是目標物件target,後面的引數都是源物件(source)。只有一個引數不是物件,就會丟擲TypeError錯誤

Object.assign只複製自身屬性,不可列舉的屬性(enumerable為false)和繼承的屬性不會被複制。

舉例:

var target = {a: 1};

var source1 = {b: 2};

var source2 = {c: 3};

obj = Object.assign(target, source1, source2);

target; // {a:1,b:2,c:3}

obj; // {a:1,b:2,c:3}

target === obj; // true

// 如果目標物件與源物件有同名屬性,或多個源物件有同名屬性,則後面的屬性會覆蓋前面的屬性。

var source3 = {a:2,b:3,c:4};

Object.assign(target, source3);

target; // {a:2,b:3,c:4}

Ⅲ:Object.getOwnPropertySymbols(obj)

作用:該方法會返回一個數組,該陣列包含了指定物件自身的(非繼承的)所有 symbol 屬性鍵。

舉例:Object.getOwnPropertySymbols({a: 'b', [Symbol('c')]: 'd'});// [Symbol(c)]

Ⅳ:Object.setPrototypeOf(obj, prototype)

作用:該方法設定一個指定的物件的原型 ( 即, 內部[[Prototype]]屬性)到另一個物件或 null。

注意:__proto__屬性用來讀取或設定當前物件的prototype物件。目前,所有瀏覽器(包括IE11)都部署了這個屬性。

舉例:

// ES6寫法

var obj = {

    method: function(){

        // code ...

    }

};

// obj.__proto__ = someOtherObj;

// ES5寫法

var obj = Object.create(someOtherObj);

obj.method = function(){

    // code ...

};

ES8:

Ⅰ:Object.getOwnPropertyDescriptors(obj)

作用它可以用來獲取一個物件的所有自身屬性的描述符。

注意:

舉例:

Object.getOwnPropertyDescriptor(Object.prototype, 'toString');

// {writable: true, enumerable: false, configurable: true, value: ƒ toString()}

Object.getOwnPropertyDescriptors(Object.prototype); // 太長

Ⅱ:Object.values(obj)

作用:返回一個給定物件自己的所有可列舉屬性值的陣列,值的順序與使用for...in迴圈的順序相同 ( 區別在於for-in迴圈列舉原型鏈中的屬性 )。

舉例:

var obj = {a:1,b:2,c:3};

Object.keys(obj); // ['a','b','c']

Object.values(obj); // [1,2,3]

Ⅲ:Object.entries(obj)

作用:Object.entries() 方法返回一個給定物件自己的可列舉屬性[key,value]對的陣列,陣列中鍵值對的排列順序和使用 for...in 迴圈遍歷該物件時返回的順序一致(區別在於一個for-in迴圈也列舉原型鏈中的屬性)。

舉例:

var obj = {a:1,b:2,c:3};

Object.keys(obj); // ['a','b','c']

Object.values(obj); // [1,2,3]

Object.entries(obj); // [['a',1],['b',2],['c',3]]