Javascript对象
程序员文章站
2022-04-24 23:13:23
...
来源于慕课网课程 JavaScript深入浅出
对象结构介绍
说明:
1. javascript对象中的每个属性有很多属性标签和方法,比如:writable, enumerable, configurable, value, get/set
2. 每个对象都有与之相关的对象标签:原型([[proto]]), 类([[class]])和可扩展性([[extensible]])
属性标签说明:
Object.getOwnPropertyDescriptor({pro:true}, 'pro'};
// Object{value:true, writable:true, enumerable:true, configurable:true}
writable: 如果为false, 则赋值失效
configurable: 如果为false, 则delete失效
enumerable: 如果为false, 则使用for.. in 不可迭代
举例说明:
var person = {}
Object.defineProperty(person, 'name', {
configurable: false,
writable:false,
enumerable: false,
value: 'Bosn Ma'
});
> person.name // Bosn Ma
> person.name = 1
> person.name //仍然是Bosn Ma,赋值为1无效,因为writable为false
> delete person.name // false, 无效因为configurable为false
> Object.keys(person) // [], 因为enumerable为false
对象标签
原型标签proto
obj > Object.prototype > nullclass标签:表示对象的类型信息,通过Object.prototype.toString()方法查询
var toString = Object.prototype.toString;
function getType(o){
return toString.call(o).slice(8, -1);
};
> toString.call(null); // "[object Null]"
> getType(null); // "Null"
> getType(undefined); // "Undefined"
> getType(1); // "Number"
> getType(new Number(1)); "Number" 这是因为Object.prototype.toString.call方法,首先将o转换成相应的对象,然后在判断类型,因此传入字面量"1"和"new Number(1)",结果是一样的
> typeof new Number(1) //"object"
> getType(true); // "Boolean"
> getType(new Boolean(true)); // "Boolean"
- extensible标签:对象的属性是否可以添加
var obj={x:1, y:2}
Object.isExtensible(obj); //true
Object.preventExtensions(obj);
Object.isExtensible(obj); // false
obj.z=1;
obj.z; // undefined, add new property failed
Object.getOwnPropertyDescriptor(obj, 'x'); // Object {value: 1, writable: true, enumerable: true, configurable: true}
Object.seal(obj);
Object.getOwnPropertyDescriptor(obj, 'x'); // Object {value: 1, writable: true, enumerable: true, configurable: false}
Object.isSealed(obj); // true
Object.freeze(obj);
Object.getOwnPropertyDescriptor(obj, 'x'); // Object {value: 1, writable: false, enumerable: true, configurable: false}
Object.isFrozen(obj); // true