对象结构
属性标签:
可写 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 ';
}; |