hasOwnProperty
个人笔记,方便自己看,另外感谢后盾人向军老师,笔记借鉴 后盾人。 不能检测原型链上是否继承该属性,有则返回ture
如果想判断该对象是否能使用该属性可以使用 in
let a = ['houdunren'];
console.log(a.hasOwnProperty('concat'))
console.log('concat' in a);
console.log(a)
Object.assgin(a,b);
合并两个对象的属性,有相同属性名时,由b的值替代a值。
<script>
let a = {
name: 'why',
}
function upload(params) {
let b = Object.assign(params, a)
console.log(JSON.stringify(b)) //JSON.stringify()将对应的值字符串化 JSON.parse()还原
}
upload({ age: 11, name: 'why1' });
</script>
Object.keys(),Object.values(), Object.entries()
<script>
let hd = {
name: 'why',
age: 11
}
console.log(Object.keys(hd))
console.log(Object.values(hd))
console.log(JSON.stringify(Object.entries(hd), null, 3))
</script>
getOwnPropertyDescripter() 和 defineProperty()
Object.getOwnPropertyDescriptor()用来查看对象属性的描述
let a = {
name: 'why',
age: 11,
}
console.log(JSON.stringify(Object.getOwnPropertyDescriptor(a, 'name'), null, 2))
| 特性 | 说明 | 默认值 |
|---|---|---|
| configurable | 能否使用delete、能否需改属性特性、或能否修改访问器属性 | true |
| enumerable | 对象属性是否可通过for-in循环,或Object.keys() 读取 | true |
| writable | 对象属性是否可以修改 | true |
设置特性:
使用Object.defineProperty 方法修改属性特性,通过下面的设置属性name将不能被遍历、删除、修改。
"use strict";
const user = {
name: "why"
};
Object.defineProperty(user, "name", {
value: "why",
writable: false,
enumerable: false,
configurable: false
});
使用 Object.defineProperties 可以一次设置多个属性,具体参数和上面介绍的一样。
"use strict";
let user = {};
Object.defineProperties(user, {
name: { value: "why", writable: false },
age: { value: 18 }
});
console.log(user);
user.name = "why"; //TypeError
禁止添加属性preventExtensions
let a = {
name: 'why',
age: 11,
}
// console.log(JSON.stringify(Object.getOwnPropertyDescriptor(a, 'name'), null, 2))
a.hobby = 'js';
Object.preventExtensions(a);
a.sex = 'nan';
console.log(a) //{name: 'why', age: 11, hobby: 'js'}
console.log(Object.isExtensible(a));//false
Object.seal()
方法封闭一个对象,阻止添加新属性并将所有现有属性标记为 configurable: false
let a = {
name: 'why',
age: 11,
}
Object.seal(a);
a.sex = 'man' //sex属性并没有被添加进去
console.log(JSON.stringify(Object.entries(a), null, 2));
console.log(Object.isSealed(a));//true
冻结对象
Object.freeze冻结对象后不允许添加、删除、修改属性,writable、configurable都标记为false
let a = {
name: 'why',
age: 11,
}
Object.freeze(a);
a.name = 'wy';
console.log(a);//{name: 'why', age: 11}
console.log(Object.isFrozen(a));//true
\