object常用的方法

When you get more and more beautiful , naturally sameone pays attention to you.When you become more and more capable,people will naturally look up to you.

1.Object.assign(target,source1,source2,...)

该方法主要用于对象的合并,将源对象source的所有可枚举属性合并到目标对象target上,此方法只拷贝源对象的自身属性,不拷贝继承的属性。

Object.assign方法实行的是浅拷贝,而不是深拷贝。

Object.assign只能进行值的复制,如果要复制的值是一个取值函数,那么将求值后再复制。

Object.assign可以用来处理数组,但是会把数组视为对象

const target = { x : 0,y : 1};

const source = { x : 1,z : 2 ,fn : {number : 1}};

console.log(Object.assign(target, source));

// target  {x : 1, y : 1, z : 2, fn : {number : 1}} // 同名属性会被覆盖

target.fn.number = 2;

console.log(source)    // source  {x : 1, z : 2, fn : {number : 2}} // 拷贝为对象引用

function Person(){

  this.name = 1

};

Person.prototype.country = 'china';

var student = new Person();

student.age = 29 ;

const young = {name : 'zhang'};

Object.assign(young,student);

// young {name : 'zhang', age : 29}              // 只能拷贝自身的属性,不能拷贝prototype

Object.assign([1, 2, 3], [4, 5]) // 把数组当作对象来处理

2.Object.create(prototype,[propertiesObject]) 使用指定的原型对象去创建一个新的对象,protoype是在原型上

var parent = { x : 1,y : 1}

var child = Object.create(parent,{

z : { // z会成为创建对象的属性

    writable:true,

    configurable:true,

    value: "newAdd"

  }

});

console.log(child)//{z:"newAdd"}

console.log(child.x)//1   在child的原型上

4.Object.defineProperty(obj,prop,descriptor)

在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。

5.Object.keys(obj)

返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...in 循环遍历该对象时返回的顺序一致 (两者的主要区别是 一个 for-in 循环还会枚举其原型链上的属性)。

var arr = ["a", "b", "c"];

console.log(Object.keys(arr));

// ['0', '1', '2']

/* Object 对象 */

var obj = { foo: "bar", baz: 42 },

keys = Object.keys(obj);

console.log(keys);

// ["foo","baz"]

6.Object.values()

方法返回一个给定对象自己的所有可枚举属性值的数组,值的顺序与使用for...in循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。

Object.values会过滤属性名为 Symbol 值的属性。

var an_obj = { 100: 'a', 2: 'b', 7: 'c' };

console.log(Object.values(an_obj));// ['b', 'c', 'a']

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

console.log(Object.values(obj));// ['a', 'b', 'c']

7.Object.entries()

返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for...in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环也枚举原型链中的属性)。

const obj = { foo: 'bar', baz: 42 };

console.log(Object.entries(obj));// [ ['foo', 'bar'], ['baz', 42] ]

const simuArray = { 0: 'a', 1: 'b', 2: 'c' };

console.log(Object.entries(simuArray));// [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ]

8.hasOwnProperty()

判断对象自身属性中是否具有指定的属性。

obj.hasOwnProperty('name')

9.Object.getOwnPropertyNames()

返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组。

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

Object.getOwnPropertyNames(obj).forEach(function(val) {

  console.log(val);

});

var obj = {

  x : 1,

  y : 2

}

Object.defineProperty(obj,'z',{

  enumerable : false

})

console.log(Object.getOwnPropertyNames(obj))// ["x", "y", "z"] 包含不可枚举属性 。

console.log(Object.keys(obj))// ["x", "y"]      只包含可枚举属性 。

10.isPrototypeOf()

判断一个对象是否存在于另一个对象的原型链上。

11.Object.setPrototypeOf(obj,prototype)

设置对象的原型对象

12.Object.is()

判断两个值是否相同。

如果下列任何一项成立,则两个值相同:

两个值都是 undefined

两个值都是 null

两个值都是 true 或者都是 false

两个值是由相同个数的字符按照相同的顺序组成的字符串

两个值指向同一个对象

两个值都是数字并且

都是正零 +0

都是负零 -0

都是 NaN

都是除零和 NaN 外的其它同一个数字

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

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

Object.is('foo', 'bar'); // false

Object.is([], []); // false

var test = { a: 1 };

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

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

// 特例

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

Object.is(-0, -0); // true

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

13.Object.freeze()

冻结一个对象,冻结指的是不能向这个对象添加新的属性,不能修改其已有属性的值,不能删除已有属性,以及不能修改该对象已有属性的可枚举性、可配置性、可写性。也就是说,这个对象永远是不可变的。该方法返回被冻结的对象。

var obj = {

  prop: function() {},

  foo: 'bar'

};

// 新的属性会被添加, 已存在的属性可能

// 会被修改或移除

obj.foo = 'baz';

obj.lumpy = 'woof';

delete obj.prop;

// 作为参数传递的对象与返回的对象都被冻结

// 所以不必保存返回的对象(因为两个对象全等)

var o = Object.freeze(obj);

o === obj; // true

Object.isFrozen(obj); // === true

// 现在任何改变都会失效

obj.foo = 'quux';// 静默地不做任何事

// 静默地不添加此属性

obj.quaxxor = 'the friendly duck';

console.log(obj)

14.Object.isFrozen()

判断一个对象是否被冻结 .

15.Object.preventExtensions()

对象不能再添加新的属性。可修改,删除现有属性,不能添加新属性。

var obj = {

  name :'lilei',

  age : 30 ,

  sex : 'male'

}

obj = Object.preventExtensions(obj);

console.log(obj);// {name: "lilei", age: 30, sex: "male"}

obj.name = 'haha';

console.log(obj)// {name: "haha", age: 30, sex: "male"}

delete obj.sex ;

console.log(obj); // {name: "haha", age: 30}

obj.address  = 'china';

console.log(obj) // {name: "haha", age: 30}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350