对象结构web
属性标签:json
可写 writablethis
可配置 configurablespa
可遍历 enumerableprototype
获取/设置code
get/setorm
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]]
继承
原型实现继承ip
[[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 '
;
};
|