目录
object.propertyIsEnumerable(prop)
Object.create(obj,propertiesObject)
Object.defineProperty(obj,'prop',{value:x})
Object.defineProperties(obj,{'prop1':{value:x}},...,{'propn':{value:xn}})
Object.assign(target,obj1,obj2,...,objn)
以下介绍的都是一些本人使用过的对象的函数方法,用到新的会一直更新,然后注意大小写,其中object代表对象名,使用时用实际对象名替换的,而Object代表系统定义好的在Object上的静态函数方法,不能在实例化的对象中调用,是不能替换的。
Object(obj)
判断obj的数据类型,并返回调用对应的构造函数转化为对象的结果,比如为number类型的调用Number()函数,为null和undefined时直接返回{}。
object对象调用的方法
这些方法都是定义在Object.prototype上的方法,可以在控制台中直接通过Object.prototype.打印查看
object.hasOwnProperty(prop)
判断object对象中是否有prop属性,返回true或false(不会包含原型链上的属性)。
object.isPrototypeOf(obj)
判断object对象是否存在于obj的原型链中,返回true或false。
object.propertyIsEnumerable(prop)
判断object上的prop属性是否能被for in循环枚举,返回true或false(如果为object的原型链上的,不管是否能被for in枚举都返回false)。
Object上定义的静态方法
可以在控制台通过Object.后查看弹出的方法。
Object.create(obj,propertiesObject)
返回一个以obj为原型的对象。
参数
obj(必选):新创建对象的原型对象,即通过 Object.create()生成的对象的原型 指向 proto(可以是 null、对象、函数的 prototype 属性)。
(注:创建空原型的对象时需传 null , 否则会抛出 TypeError 异常)。
propertiesObject(可选): 添加到新创建对象的可枚举属性(即其自身的属性,而不是原型链上的枚举属性)对象的属性描述符以及相应的属性名称。这些属性对应 Object.defineProperties()的第二个参数。
注意通过propertiesObject参数创建非空对象的属性描述符默认是为 false 的,不可写,不可枚举,不可配置。
示例
var obj = Object.create({pro:'123'}, { name: { value: "pyf" } })
obj.name='123'
console.log(obj)
Object.getPrototypeOf(obj)
返回obj.__proto__指向。
Object.freeze(obj)
冻结obj对象,被冻结后该对象不能被修改,不能向这个对象添加新的属性,不能删除已有属性,不能修改属性的可枚举性、可配置性等,该对象的原型也不能修改,返回原obj(注意冻结的是堆中obj对象本身,不是引用的地址,即obj是可以被再次赋予其它对象)
Object.defineProperty(obj,'prop',{value:x})
Vue2.0的底层原理,添加或定义obj对象的prop属性的描述符,其中最后一个参数为描述符,以对象的形式传入,它有value、configurable、enumerable、writable、get、set,其中value、get、set默认为undefined,configurable、enumerable、writable默认为false,默认情况configurable代表属性不能改变和删除,enumerable代表不能枚举,writable代表value值不能被赋值运算符(=)改变。
Object.defineProperties(obj,{'prop1':{value:x}},...,{'propn':{value:xn}})
同上,可同时定义多个属性的描述符。
Object.is(value1,value2)
比较value1和value2值是否相等,和===基本相同,区别在于Object.is(NaN,NaN)会返回true,Object.is(+0,-0)会返回false,===则相反。
注意对象还是比较引用。
Object.assign(target,obj1,obj2,...,objn)
用于将对象obj中的所有可枚举属性复制到目标对象target中,并返回target对象。
如果只传入一个参数,会将该参数转化为对象(null和undefined不能转化为对象,会报错)。
传入多个参数,obj中有相同属性的,obj的属性在后面的会覆盖前面的,如果obj为字符串会转化为字符串对象(会有0~obj.length-1的属性对应字符串中每个字符)。
注意该方法和...解构方法一样是不能复制getter方法,只会将之前的值复制 。
const p1 = {
firstName: 'Lei',
lastName: 'Wang',
get fullName(){
return this.firstName + ' ' + this.lastName
}
}
const des = Object.getOwnPropertyDescriptors(p1)
const p2 = Object.defineProperties({},des);
p2.firstName = 'y'
console.log(p2.fullName) // y Wang
const p3 = Object.assign({},p1)
p3.firstName='y';
console.log(p3) // Lei Wang
const p4 = {...p1}
p4.firstName='y';
console.log(p4) // Lei Wang
js中getter和setter
const p1 = {
firstName: 'Lei',
lastName: 'Wang',
get fullName(){
return this.firstName + ' ' + this.lastName
},
set fullName(value) {
console.log(value)
// this.fullName = value // 注意不能给fullName赋值,不然会发生死循环。
}
}
p1.fullName // Lei Wang
p1.fullName = 'yf' // yf
p1.fullName // Lei Wang
Object.keys(obj)
返回一个数组,数组每一位存放obj的可枚举属性。
Object.values(obj)
返回一个数组,数组每一位存放obj的可枚举属性的值。
Object.entries(obj)
返回一个数组,数组每一位存放了一个数组包含2个值的数组,一个值为可枚举属性,另一个为可枚举属性的值。