关于数组以及对象一些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]]

猜你喜欢

转载自blog.csdn.net/wwqqqq123/article/details/83900235
今日推荐