JavaScript原生对象常用方法总结

目录

【1】Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。

【2】Object.create() 方法用于创建一个新对象。被创建的对象会继承另一个对象的原型,在创建新对象时还可以指定一些属性。

【3】Object.defineProperties() 直接在一个对象上定义新的属性或修改现有属性,并返回该对象。

【4】Object.keys() 遍历对象,返回一个数组,包含了该对象自身的所有可枚举属性名

【5】Object.getOwnPropertyNames() 遍历对象,返回一个数组,包含了该对象自身的可枚举和不可枚举属性名

【6】Object.is() 方法用于判断两个值是否是相同的值

【7】Object.entries() 方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for...in循环遍历该对象时返回的顺序一致

【8】Object.freeze() 方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze() 返回和传入的参数相同的对象。


【1】Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。

语法 :

Object.assign(target, ...sources)

描述 :

对象合并是指:将源对象sources里面的属性添加到目标对象target中去,若两者的属性名有冲突,后面的将会覆盖前面的 

参数描述
target目标对象(sources和target对象属性进行合并, 复制结束之后, 将结果放到target对象中)
sources源对象(需要复制属性的对象, 可以是多个)

示例 :

    // var newObj = Object.assign({}, obj1, obj2); 
    //花括号叫目标对象,后面的obj1、obj2是源对象。对象合并是指:将源对象里面的属性添加到目标对象中去,若两者的属性名有冲突,后面的将会覆盖前面的
    
    var obj1 = {
      a: 1,
      b: 2
    };
    var obj2 = {
      b: 4,
      c: 5
    };

    var newObj = Object.assign({}, obj1, obj2);
    console.log(newObj) // {a: 1, b: 4, c: 5}

【2】Object.create() 方法用于创建一个新对象。被创建的对象会继承另一个对象的原型,在创建新对象时还可以指定一些属性。

语法 :

Object.create(proto [, propertiesObject])

描述 :

使用Object.create()方法创建新对象时,如果不是继承一个原有的对象,而是要创建一个全新的对象,就要把proto参数设置为null。如果proto参数不是null或一个对象时,会抛出一个TypeError异常。

参数描述
proto要继承的原型
propertiesObject可选参数,为新创建对象指定的属性对象。该参数对象是一组属性和值,对象的属性名将会是新创建的对象的属性名,属性值是属性描述符。该对象可能会包含以下值:
  • configurable,表示新创建的对象属性是否是可配置的,即:对象的属性是否可以被删除或修改,默认false
  • enumerable,对象属性是否可枚举的,即:是否可以for of枚举,默认false
  • value,对象属性的值,可以是任何合法的JavaScript的值,如:number、object、function等,默认undefined 
  • writable,对象属性是否可以任意写,默认false
  • get,对象函数getter,默认undefined 
  • set,对象setter函数,默认undefined 

示例 :

    // 例子一:
    let newObj = Object.create(null, {
      size: {
        value: 'large',
        enumerable: true	//表示当使用for/in语句时,该属性是否会被枚举,默认为false
      },
      shape: {
        value: 'round',
        enumerable: true
      }
    })
    console.log(newObj) // {size: "large", shape: "round"}


    // 例子二
    function person() {};
    person.prototype.name = 'Jack';
    person.prototype.age = '17';
    //获取对象person的原型
    let newObj = Object.create(person.prototype, {
      size: {
        value: 'large',
        enumerable: true
      },
      shape: {
        value: 'round',
        enumerable: true
      }
    })
    console.log(newObj)      // person {size: "large", shape: "round"}
    console.log(newObj.name) // Jack
    console.log(newObj.age)  // 17

【3】Object.defineProperties() 直接在一个对象上定义新的属性或修改现有属性,并返回该对象。

语法 :

Object.defineProperties(obj, props)

描述 :

参数描述
obj需要定义或修改属性的对象。
props

要定义其可枚举属性或修改的属性描述符的对象。对象中存在的属性描述符主要有两种:数据描述符和访问器描述符,描述符具有以下键:

configurable:当且仅当该属性描述符的类型可以被改变并且该属性可以从对应对象中删除。默认为 false

enumerable: 当且仅当在枚举相应对象上的属性时该属性显现。默认为 false

value:与属性关联的值。可以是任何有效的JavaScript值(数字,对象,函数等)。默认为 undefined.

writable:当且仅当与该属性相关联的值可以用assignment operator改变时。默认为 false

get:作为该属性的 getter 函数,如果没有 getter 则为undefined。函数返回值将被用作属性的值。

set:作为属性的 setter 函数,如果没有 setter 则为undefined。函数将仅接受参数赋值给该属性的新值。

示例 :

    let obj = {
      sex: '女'
    };
    Object.defineProperties(obj, {
      'name': {
        value: 'Demi',
        writable: true,
        enumerable: true,
      },
      'age': {
        value: 24,
        writable: false,
        enumerable: false
      },
      'sex': {
        value: '男',
      }
      
    });
    console.log(obj) // {sex: "男", name: "Demi", age: 24}

 

【4】Object.keys() 遍历对象,返回一个数组,包含了该对象自身的所有可枚举属性名

语法 :

Object.keys(obj)

描述 :

参数描述
obj要返回其枚举属性的对象。

示例 :

    let arr = ['a', 'b', 'c'];
    console.log(Object.keys(arr)); // ['0', '1', '2']

    let obj = { 0: 'a', 1: 'b', 2: 'c' };
    console.log(Object.keys(obj)); // ['0', '1', '2']

    let obj = { firstName: 'a', lastName: 'b' };
    console.log(Object.keys(obj)); // ['firstName', 'lastName']

【5】Object.getOwnPropertyNames() 遍历对象,返回一个数组,包含了该对象自身的可枚举和不可枚举属性名

语法 :

Object.keys(obj)

描述 :

参数描述
obj要返回其可枚举和不可枚举属性的对象。

示例 :

    let arr = ['a', 'b', 'c'];
    console.log(Object.getOwnPropertyNames(arr)); // ['0', '1', '2', 'length']

    let obj = { 0: 'a', 1: 'b', 2: 'c' };
    console.log(Object.getOwnPropertyNames(obj)); // ['0', '1', '2']

    let obj = { firstName: 'a', lastName: 'b' };
    console.log(Object.getOwnPropertyNames(obj)); // ['firstName', 'lastName']

【6】Object.is() 方法用于判断两个值是否是相同的值

语法 :

Object.is(value1, value2)

描述 :

Object.is()判断两个值是否相同。如果下列任何一项成立,则两个值相同:

  • 两个值都是 undefined
  • 两个值都是 null
  • 两个值都是 true 或者都是 false
  • 两个值是由相同个数的字符按照相同的顺序组成的字符串
  • 两个值指向同一个对象
  • 两个都是数字并且:
  1. 都是正零 +0
  2. 都是负零 -0
  3. 都是 NaN
  4. 都是除零和 NaN 外的其它同一个数字

* 这种相等性判断逻辑和传统的 ==运算不同,== 运算符会对它两边的操作数做隐式类型转换(如果它们类型不同),然后才进行相等性比较,(所以才会有类似 "" == false 等于 true的现象),但Object.is()不会做这种类型转换。

这与 ===运算符的判定方式也不一样。=== 运算符(和== 运算符)将数字值 -0 和 +0 视为相等,并认为Number.NaN不等于 NaN 。

参数描述
value1第一个需要比较的值。
value2第二个需要比较的值。

示例 :

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

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

    var foo = { a: 1 };
    var bar = { a: 1 };
    Object.is(foo, foo);         // true
    Object.is(foo, bar);         // false

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

    // 特例
    Object.is(0, -0);            // false
    Object.is(0, +0);            // true
    Object.is(-0, -0);           // true
    Object.is(NaN, 0 / 0);         // true

【7】Object.entries() 方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for...in循环遍历该对象时返回的顺序一致

语法 :

Object.entries(obj)

描述 :

Object.entries(obj)返回一个数组,其元素是与直接在object上找到的可枚举属性键值对相对应的数组。属性的顺序与通过手动循环对象的属性值所给出的顺序相同。

参数描述
obj需要返回其可枚举属性的键值对的对象。

示例 :

    let obj1 = { foo: 'bar', baz: 10 };
    console.log(Object.entries(obj1)); // [ ['foo', 'bar'], ['baz', 10] ]
  
    let obj2 = { 0: 'a', 1: 'b', 2: 'c' };
    console.log(Object.entries(obj2)); // [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ]

    let obj3 = { 100: 'a', 2: 'b', 7: 'c' };
    console.log(Object.entries(obj3)); // [ ['2', 'b'], ['7', 'c'], ['100', 'a'] ]

【8】Object.freeze() 方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze() 返回和传入的参数相同的对象。

语法 :

Object.freeze(obj)

描述 :

参数描述
obj需要被冻结的对象。

示例 :

    const obj1 = {
      prop: 42
    };
    const obj2 = Object.freeze(obj1); 

    obj1.prop = 33; // 对象冻结,属性无法修改
    console.log(obj2.prop); // 42
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@Demi

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值