Object的属性与方法
0|1属性
constructor
一个引用值,返回 Object
的构造函数(用于创建实例对象)
prototype
用于查找Object原型上的属性或者给对象原型上添加属性和方法
0|2实例方法
Object.assign(target,...sources)
参数
target
-
目标对象,接收源对象属性的对象,也是修改后的返回值。
sources
-
源对象,包含将被合并的属性。
返回值
目标对象。
Object.assign()
方法将所有可枚举
(Object.propertyIsEnumerable()
返回 true)和自有
(Object.hasOwnProperty()
返回 true)属性从一个或多个源对象复制到目标对象,返回修改后的对象。
合并对象:
返回值是不重复的对象,其中重复的属性会被后续参数中具有相同属性的其他对象覆盖。
Vue中的使用技巧:
由于Object.assign()
有上述特性,所以我们在Vue中可以这样使用:Vue组件可能会有这样的需求:在某种情况下,需要重置Vue组件的data数据。此时,我们可以通过this.$data
获取当前状态下的data,通过this.$options.data()
获取组件初始状态下的data。然后只要使用Object.assign(this.$data, this.$options.data())
就可以将当前状态的data重置为初始状态,非常方便。
Object.create()
用于创建一个新对象,使用现有的对象来作为新创建对象的原型(prototype)。
上面这句话是什么意思呢?
正常来说一个对象的原型还是一个对象,比如说下面的a是一个对象,当你打印这个a的时候,他的原型是一个Object,他这个对象上有一些方法跟属性.
那么Object.create()是以一个你已经有的对象,将这个对象为你的原型对象(就是原型链的上一级),在重新复制一个新的对象
这个是打印的B(就是用Object.create()创建的的对象)他的上一级是A这个对象
语法:
Object.create(proto)
Object.create(proto, propertiesObject)
参数:
proto
新创建对象的原型对象。
propertiesObject
可选
如果该参数被指定且不为 undefined
,则该传入对象的自有可枚举属性(即其自身定义的属性,而不是其原型链上的枚举属性)将为新创建的对象添加指定的属性值和对应的属性描述符。这些属性对应于 Object.defineProperties()
的第二个参数。
返回值
一个新对象,带着指定的原型对象及其属性。
作用:
我们在使用过程中经常遇到,现在有一个对象A,A里面有属性和方法,我们现在需要一个和A有同样的属性和方法外,还另外新增一些属性,此刻我们就可以创建一个对象B,然后使用var B=Object.create(A);此时B就会继承A继承所有属性和方法,然后B还可以自己创建新的属性和方法。
完整写法
let B = Object.create(A, {
fo: {//属性
value: '值',
writable: true,//是否能重写
enumerable: true,//是否可以枚举(遍历)
configurable: true,//
是否可以被删除
},
go: {//方法
value: function () {
return '跑步'
},
}
})
console.log(B);
第一个参数proto可以是{ }|目标对象| null
参数为{ }
参数为目标对象
Object.defineProperty( )
方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
Object.defineProperty(obj, prop, descriptor)
参数
- obj
- 要定义属性的对象。
- prop
- 要定义或修改的属性的名称或 Symbol 。
- descriptor
- 要定义或修改的属性描述符。
示例:
var b = Object.create({})
//var b = { }
Object.defineProperty(b, 'key', {
value: 37,
writable: true,//是否能重写
enumerable: true,//是否可以枚举(遍历)
configurable: true,//是否可以被删除
})
console.log(b);
Object.defineProperties(obj, props)
给对象添加多个属性并分别指定它们的配置。
参数:
obj
在其上定义或修改属性的对象。props
要定义其可枚举属性或修改的属性描述符的对象。对象中存在的属性描述符主要有两种:数据描述符和访问器描述符(更多详情,请参阅 Object.defineProperty()
)。
示例:
let a = {}
Object.defineProperties(a, {
'x': {
value: '吃饭',
writable: true
},
'y': {
value: '睡觉',
writable: true
}
})
console.log(a);
Object.entries(obj)
返回给定对象自身可枚举属性的 [key, value]
数组。
let A = {
x: 1,
y: 2,
}
for(let arr of Object.entries(A)){
console.log(arr);// ['x', 1] ['y', 2]
}
对arr用es6的方法进行解构
for(let [key,value] of Object.entries(A)){
console.log(key,value);
}
Object.freeze(obj)
冻结对象:其他代码不能删除或更改任何属性。
返回值
被冻结的对象。
Object.getOwnPropertyDescriptor(obj,prop)
返回对象指定的属性配置
参数:
obj
需要查找的目标对象
prop
目标对象内属性名称
let A = {
x: 1,
y: 2,
}
console.log(Object.getOwnPropertyDescriptor(A,'x'));
Object.is(value1,value2)
比较两个值是否相同。所有 NaN 值都相等(这与==和===不同)。
返回值: 布尔值
1|0Object.is() 与 === 运算符的区别是什么
双等号运算符(==)仅仅比较值,而三等号运算符(===)可以比较值和类型。但是还有第三个选项 Object.is(),除了 NaN,+0 和 -0 之外,其行为与三等号于运算符相同。
console.log(NaN===NaN);//false
console.log(Object.is(NaN, NaN));//true
console.log(+0===-0);//true
console.log(Object.is(+0,-0));//false
Object.keys(obj)
返回一个包含所有给定对象自身可枚举属性名称的数组。
示例:
let A = {
x: 1,
y: 2,
}
console.log(Object.keys(A));
let A = {
x: 1,
y: 2,
}
Object.keys(A).forEach(item=>{
console.log(A[item]);
})
Object.values(obj)
返回给定对象自身可枚举值的数组。
示例:
let A = {
x: 1,
y: 2,
}
console.log(Object.values(A));
Object.prototype.toString()
let a={}
console.log(Object.prototype.toString.call(a) === '[object Object]');//true
let b=[]
console.log(Object.prototype.toString.call(b) === '[object Array]');//true
let c='12'
console.log(Object.prototype.toString.call(c) === '[object String]');//true
let d=1
console.log(Object.prototype.toString.call(d) === '[object Number]');//true
__EOF__

本文链接:https://www.cnblogs.com/jingxin01/p/16417932.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!