前言
还记得有一次面试的时候, 面试官问了一个Object,但当时只是觉得考察点是object类型,没有想到JavaScript标准内置对象Object的方法
Object
Object构造函数创建一个对象包装器
在JavaScript中,几乎所有的对象都是Object
类型的实例,它们都会从Object.prototype
继承属性和方法。Object
构造函数为给定值创建一个对象包装器。Object
构造函数,会根据给定的参数创建对象,具体有以下情况:
- 如果给定值是
null
或undefined
,将会创建并返回一个空对象 - 如果传进去的是一个基本类型的值,则会构造其包装类型的对象
- 如果传进去的是引用类型的值,仍然会返回这个值,经他们复制的变量保有和源对象相同的引用地址
当以非构造函数形式被调用时,Object
的行为等同于 new Object()
。
可查看 对象初始化/字面量语法。
Object
构造函数的属性
Object.length 的值为1
Object.prototype 可以为所有的Object类型的对象添加属性
let a = new Object()
a._propto_ === Object.prototype (原型链知识)
语法
//构造函数初始化器
new Object([value])
//对象初始化
{ [ nameValuePair1[, nameValuePair2[, ...nameValuePairN] ] ] }
静态方法
Object.assign()
合并具有 相同属性的对象时 source源对象中与目标对象中的键相同 源对象中的键会替代前面相同的键
// 语法
Object.assign(target, ...sources)
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget = Object.assign(target, source);
console.log(target) //{ a: 1, b: 4, c: 5 } 会改变原来的值
console.log(returnedTarget) //{ a: 1, b: 4, c: 5 }
console.log(source)//{ b: 4, c: 5 } 不会改变
//常用:
let a = Object.assign(obj,{}) // 注意浅拷贝
Object.defineProperty()
Object.defineProperty()
方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
通过其属性值控制新定义的属性并且可以修改对象上原有的属性值
语法
Object.defineProperty(obj, prop, descriptor)
const object1 = {};
Object.defineProperty(object1, 'property1', {
value: 42,
writable: false
});
object1.property1 = 77;
console.log(object.property) //42
参数
-
obj
-
要定义属性的对象。
-
prop
-
要定义或修改的属性的名称或
Symbol
。 -
descriptor
-
要定义或修改的属性描述符。