1、Object.assign 函数(对象)(JavaScript)

将来自一个或多个源对象中的值复制到一个目标对象。语法: Object.assign(target, ...sources );

此函数返回目标对象。仅可枚举自有属性从源对象复制到目标对象。可使用此函数合并或克隆对象。null 或 undefined 源被视为空对象一样对待,不会对目标对象产生任何影响。

let obj1 = {
name: 'xiaoming'
}
let obj2 = {
age: '23'
}
let obj3 = Object.assign(obj1,obj2)
let obj4 = Object.assign({},obj1)//克隆了obj1对象
console.log(obj3)//{name: "xiaoming", age: "23"}
console.log(obj4)//{name: "xiaoming", age: "23"}
console.log(obj1)//{name: "xiaoming", age: "23"}。obj1发生改变是因为obj2赋给了obj1
console.log(obj2)//{age: "23"}

方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。同名属性会替换。

let obj5 = {
  number: 6,
  name: 'zengfp',
  fn: {
    sum: 10
  }
}
let obj6 = Object.assign(obj1,obj5)
console.log(obj6)//{name: "zengfp", age: "23", number: 6, fn: {…}}
console.log(obj1)//{name: "zengfp", age: "23", number: 6, fn: {…}}
对同名属性name进行了替换

2、Object.create 函数 (JavaScript)。创建一个具有指定原型且可选择性地包含指定属性的对象。语法: Object.create(prototype, descriptors)

若要停止原型链,可以使用采用了 null prototype 参数的函数。  所创建的对象将没有原型。

let newObj = Object.create(null, {
size: {
value: "large",
enumerable: true
},
shape: {
value: "round",
enumerable: true
}
});
console.log(newObj)//{size: "large", shape: "round"}
console.log(Object.getPrototypeOf(newObj))//null

创建一个具有与 person 对象相同的内部原型的对象

      let person = {
name: 'zengfp',
age: 25
}
let obj = Object.create(person,{
z: {
value: 8
}
})
console.log(obj)//{z:8}
console.log(Object.getPrototypeOf(obj))//{name: "zengfp", age: 25}

3、Object.defineProperties 函数 (JavaScript)。将一个或多个属性添加到对象,并/或修改现有属性的特性。语法: object.defineProperties(object, descriptors)

let obj = {}
Object.defineProperties(obj,{
newDataProperty: {
value: 101,
writable: true,
enumerable: true,
configurable: true
},
newAccessorProperty: {
set: function (x) {
this.newaccpropvalue = x;
},
get: function () {
return this.newaccpropvalue;
},
enumerable: true,
configurable: true
}
})
console.log(obj.newDataProperty)//101
obj.newAccessorProperty = 20
console.log(obj.newAccessorProperty)//20

4、Object.defineProperty 函数 (JavaScript)。将属性添加到对象,或修改现有属性的特性。语法: Object.defineProperty(object, propertyname, descriptor)

可使用 Object.defineProperty 函数来执行以下操作:

  • 向对象添加新属性。  当对象不具有指定的属性名称时,发生此操作。

  • 修改现有属性的特性。  当对象已具有指定的属性名称时,发成此操作。

描述符对象中会提供属性定义,用于描述数据属性或访问器属性的特性。  描述符对象是 Object.defineProperty 函数的参数

     let obj = {}
Object.defineProperty(obj,'newDataProperty',{
value: 101,
writable: true,
enumerable: true,
configurable: true
})
obj.newDataProperty = 88
console.log(obj.newDataProperty)//
 5、Object.is 函数 (JavaScript)。返回一个值,该值指示两个值是否相同。语法: Object.is(value1, value2) 

与 = = 运算符不同,Object.is 在测试值时不会强制任何类型。Object.is 应用的比较类似于 === 运算符所应用的比较,区别在于 Object.is 将 Number.isNaN 视作与 NaN 相同的值。它还将 + 0 和-0 视作不同值。

      let obj = {
x: 5,
y: 6
}
let obj1 = {
x: 5,
y: 8
}
      let obj2 = {
        x:'5',
        y: 8
      }
console.log(Object.is(obj.x,obj1.x))//true
     console.log(Object.is(obj2.x,obj1.x))//false

6、Object.keys 函数 (JavaScript)。返回对象的可枚举属性和方法的名称。语法: Object.keys(object) 。返回一个数组,其中包含对象的可枚举属性和方法的名称。

      let obj = {
x: 5,
y: 6,
name: 'zengf'
}
let keys = Object.keys(obj)
console.log(keys)// ["x", "y", "name"]

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

const obj = { foo: 'bar', baz: 42 };
console.log(Object.entries(obj)); // [ ['foo', 'bar'], ['baz', 42] ] // array like object
const obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.entries(obj)); // [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ] // array like object with random key ordering
const anObj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.entries(anObj)); // [ ['2', 'b'], ['7', 'c'], ['100', 'a'] ] // getFoo is property which isn't enumerable
const myObj = Object.create({}, { getFoo: { value() { return this.foo; } } });
myObj.foo = 'bar';
console.log(Object.entries(myObj)); // [ ['foo', 'bar'] ] // non-object argument will be coerced to an object
console.log(Object.entries('foo')); // [ ['0', 'f'], ['1', 'o'], ['2', 'o'] ] // iterate through key-value gracefully
const obj = { a: 5, b: 7, c: 9 };
for (const [key, value] of Object.entries(obj)) {
console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
} // Or, using array extras
Object.entries(obj).forEach(([key, value]) => {
console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
});

参考网址:https://msdn.microsoft.com/zh-cn/library/k6xhc6yc(v=vs.94).aspx

Javascript中Object常用方法学习的更多相关文章

  1. javascript中数组常用方法总结

    原文:javascript中数组常用方法总结 在javascript的基础编程中,数组是我们最常遇到的,那么数组的一些常用方法也是我们必须要掌握的,下面我们总结一下数组中常用的方法. toString ...

  2. JavaScript中Object的总结

    基于原型继承,动态对象扩展,闭包,JavaScript已经成为当今世界上最灵活和富有表现力的编程语言之一. 这里有一个很重要的概念需要特别指出:在JavaScript中,包括所有的函数,数组,键值对和 ...

  3. JavaScript中Object.prototype.toString方法的原理

    在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法. ? 1 2 var arr = []; console.lo ...

  4. JavaScript中Math常用方法

    title: JavaScript中Math常用方法 toc: false date: 2018-10-13 12:19:31 Math.E --2.718281828459045,算数常量e Mat ...

  5. JavaScript中object和Object有什么区别

    JavaScript中object和Object有什么区别,为什么用typeof检测对象,返回object,而用instanceof 必须要接Object呢 ————————————————————— ...

  6. JavaScript中的EcMAScript学习笔记

    一.Javascript概述(知道)    a.一种基于对象和事件驱动的脚本语言    b.作用: 给页面添加动态效果    c.历史: 原名叫做livescript.W3c组织开发的标准叫ECMAs ...

  7. JavaScript中数组常用方法的总结

    JavaScript中数组Array常用的方法总结 标签(空格分隔): JavaScript ECMAScript数组给我们提供了许多常用的方法,便于我们对数组进行操作,下面,就来总结一下这些方法. ...

  8. javascript中的正则表达式学习

    一.前言 关于正则表达式自身的语法这里不做过多介绍(详情可参见http://www.php100.com/manual/unze.html),这里仅仅解释javascript中和正则表达式相关的几个方 ...

  9. JavaScript中 Promise的学习以及使用

    今天一个哥们发过来一段js代码,没看懂,就顺便学习了一下,代码如下  Promise.resolve('zhangkai').then(value => {console.log(value)} ...

随机推荐

  1. 前端学习 -- Css -- 文本标签

    em和strong - 这两个标签都表示一个强调的内容, em主要表示语气上的强调,em在浏览器中默认使用斜体显示 strong表示强调的内容,比em更强烈,默认使用粗体显示 <!DOCTYPE ...

  2. java lock锁住特定对象

    由于lock没有锁住特定对象的概念,该如何做到像synchronized同步块一样的效果呢? 答案:为每一个需要加锁的对像分配一把锁. 示例: List<User> users = new ...

  3. 【codevs1297】硬币 完全背包

    题目大意:给定 N 种不同种类的硬币,每种硬币的重量范围在一个可变区间内,但是价值恒定,求给定一个重量 W,求有多少种面值不同的组合方式. 题解:如果硬币的重量恒定,那么就是一道裸的完全背包问题.因此 ...

  4. C++并发编程之std::future

    简单地说,std::future 可以用来获取异步任务的结果,因此可以把它当成一种简单的线程间同步的手段.std::future 通常由某个 Provider 创建,你可以把 Provider 想象成 ...

  5. PHP内核-环境搭建(一)

    难得闲下来,发现自己没有系统的学习过PHP内核,希望我能够慢慢啃下PHP内核书籍,无论是抄袭也好,码字也好,一步一个脚印走下去. 学习来源:http://www.php-internals.com/b ...

  6. Hadoop生态圈-Azkaban实现文件上传到hdfs并执行MR数据清洗

    Hadoop生态圈-Azkaban实现文件上传到hdfs并执行MR数据清洗 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果你没有Hadoop集群的话也没有关系,我这里给出当时我 ...

  7. Codeforces 906 D. Power Tower

    http://codeforces.com/contest/906/problem/D 欧拉降幂 #include<cstdio> #include<iostream> usi ...

  8. spring中bean配置和注入场景分析

    bean与spring容器的关系 Bean配置信息定义了Bean的实现及依赖关系,Spring容器根据各种形式的Bean配置信息在容器内部建立Bean定义注册表,然后根据注册表加载.实例化Bean,并 ...

  9. ASP.NET自定义服务器控件

    本文通过创建一个最简单的服务器控件,演示开发服务器端控件的流程. 文章内容整理自MSDN的编程指南,原文地址在文章末尾的资源中. 本文创建一个简单的服务器控件,名为 RedLabel. 它的使用方式为 ...

  10. 第9月第15天 设计模式 adapter mvc

    1. 有一道iOS面试题,iOS中都有什么设计模式?很少有答案说包括adapter. gof 书中adapter模式有以下内容: 实现: ... b ) 使 用 代 理 对 象 在这种方法中, T r ...