javascript深入浅出 对象
对象结构
属性标签:
可写 writable
可配置 configurable
可遍历 enumerable
获取/设置
get/set
1 2 3 4 5 6 7 8 9 | var obj = { $name : null , get name(){ return this .$name+ '-fix' }, set name(val){ this .$name = val; } }; |
对象标签:
[[proto]]
原型实现继承
[[class]]
获取对象类型
1 2 3 | function getType(o) { return Object .prototype.toString.call(o).slice( 8 ,- 1 ); } |
[[extensible]]
isExtensible
是否可扩展
阻止扩展 Object.preventExtensions(obj)
isSealed
是否可扩展、可配置
阻止扩展和配置 Object.seal(obj);
isFrozen
是否可扩展、可配置、可写
阻止可扩展、可配置、可写 Object.freeze(obj);
值:
value
对象创建
字面量:
new构造方法/原型链:
Object.create(字面量):
字面量作为原型
对象操作
属性操作:
属性读写
不存在写会报错
不存在读不报错
属性删除
可删除和不存在的返回true
不可删的会报错
属性检查
in 是否存在,包含原型链
1 | 'x' in obj |
hasOwnProperty 是否存在,不包含原型链
1 | obj.hasOwnProperty( 'x' ) |
propertyIsEnumberable 是否可以遍历
1 | obj.propertyIsEnumerable( 'x' ) |
属性标签定义
字面量定义
writable,configurable,enumerable默认为true
使用defineProperty
writable,configurable,enumerable默认为false
获取属性标签描述
1 | Object .getOwnPropertyDescriptor(对象, '属性' ) |
序列化:
json序列化
1 | var json_str = JSON.stringify(obj); |
json反序列化
1 | var str = JSON.parse(json_str); |
自定义
1 2 3 4 5 6 7 | to_json : { a : 1 , b : 2 , toJSON : function () { return this .a+ this .b; } } |
注意
值为undefined 会去掉
值为NaN,Infinity 转为null
new Date 转为 UTC格式
对象转基本类型:
toString
valueOf
valueOf 优先toString
定义valueOf
1 2 3 | test_o.valueOf = function () { return 'value ' ; }; |