生活只有在平淡无味的人看来才是空虚而平淡无味的。 ——<尼古拉·加夫里诺维奇·车尔尼雪夫斯基>
作者: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()的区别
赞赏一下 坚持原创技术分享,您的支持将鼓励我继续创作!