生活只有在平淡无味的人看来才是空虚而平淡无味的。 ——<尼古拉·加夫里诺维奇·车尔尼雪夫斯基>
作者:Ashish Lahoti
译者:cl9000
来源:https://codingnconcepts.com/javascript/const-vs-object-freeze/
这篇文章描述了各种对象方法的用法,比如Object.create(), Object.assign(), Object.freeze(), Object.seal()以及JavaScript中许多可用的方法的示例。
Object.create()
Object.create()方法用于创建一个新对象,并将其原型设置为现有对象。
| 1 | var car = { | 
Output
true
Driving a top model black color Honda car
这里,newCar创建了一个全新的对象,其原型设置为Car。我们设置了brand和isTopModel的值,而color的值将被继承。当我们调用drive()方法时,它在car上的原型链中找到drive()并执行。
Object.assign()
Object.assign()用于将一个对象的属性和函数复制到另一个对象中。
我们可以使用Object.assign()来合并两个对象,方法如下
| 1 | // Initialize an object | 
Output
{color: “Red”, number: 5, fruit: “Mango”, movies: [“Spider Man”, “Conjuring”]}
也可以在类构造函数中使用,将所有值赋给this,如下所示:
| 1 | class Car { | 
Object.freeze()
Object.freeze()在调用此方法后冻结对象的状态。它将忽略是否修改了任何现有属性,以及是否添加了任何新属性。
| 1 | // Initialize an object | 
Output
{username: “admin”, password: “password@123”}
Object.seal()
Object.seal()在调用此方法后密封对象的状态。它允许修改现有的属性,但是如果添加了任何新属性,则会忽略。
| 1 | // Initialize an object | 
Output
{name: “admin”, password: “123456”}
Object.defineProperty()
Object.defineproperty()用于在现有对象中定义新的属性。
属性可以用以下选项定义:
- value: 默认为undefined,如果没有提供属性的值
- writable: 默认为false,如果为true则表示该属性的值可以更改
- configurable: 默认为false,如果为true则表示可以删除属性
- enumerable: 默认为false,如果为true则表示可以枚举属性,例如在for..in循环中
| 1 | var user = {}; | 
相当于
| 1 | var user = {}; | 
Output
{name: “admin”}
Object.defineProperties()
Object.defineproperties()可用于在现有对象中定义多个属性。
| 1 | var user = {}; | 
Output
{name: “admin”, password: “password@123”}
Object.keys(), Object.values() & Object.entries()
Object.keys(), Object.values() & Object.entries()可以使用对象的迭代器,如下所示:
| 1 | let favorites = { | 
Output
keys [“color”, “number”, “vegan”, “movies”]
values [“Red”, 5, true, [“Spider Man”, “Conjuring”]]
entries [
[“color”, “Red”],
[“number”, 5],
[“vegan”, true],
[“movies”, [“Spider Man”, “Conjuring”]
]
Object.keys()和Object.entries()可用于迭代对象的键和值,如下所示:—
| 1 | Object.keys(favorites).forEach(key => console.log(`${key}: ${favorites[key]}`)); | 
-Object.is()
ES6引入了一个新的方法Object.is()来比较两个值,它的工作原理非常类似于严格的比较操作符===,还避免了NaN比较和+0/-0比较的混淆。建议使用Object.is()进行值比较。
我们来看看
| 1 | console.log(Object.is("cnc", "cnc")); // true, same content and type | 
总结 Summary
Javascript对象提供了非常有用的方法
- 使用Object.create()创建一个新对象
- 使用Object.assign()复制对象
- 使用Object.freeze()和Object.seal()保护对象
- 使用Object.defineproperty()和Object.defineproperties()定义对象属性
- 使用Object.keys()、Object.values()和Object.entries()遍历Object
- 使用Object.is()比较对象
参考
- 原文 - https://codingnconcepts.com/javascript/object-methods-in-javascript/
- MDN - https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object
关注【公众号】,了解更多。
关注【公众号】,了解更多。
关注【公众号】,了解更多。

- 
                             Previous
                            
 JavaScript中的 Lexical Scope(词法范围)、Closures(闭包)和Currying(柯里化)
- 
                            Next
                            
 JavaScript中const和Object.freeze()的区别
赞赏一下 坚持原创技术分享,您的支持将鼓励我继续创作!
 支付宝打赏
支付宝打赏 微信打赏
微信打赏 