废话不多说,直奔主题
obj.hasOwnProperty
delete obj.z
可以删除隐式全局变量,但不可已删除显示全局变量。
全局变量其实是global对象(window)的属性。
x = 10;
var y = 20;
delete x; //true;
delete y; //false
- 不能删除一个对象从原型继承而来的属性,但是可以直接从原型上删掉它;
function foo(){}
foo.prototype.name = 'zhangsan';
var f = new foo(); //delete只能删除自己的属性,不能删除继承来的属性
delete f.name; // false
console.log(f.name);//zhangsan
delete foo.prototype.anme;// true
console.log(f.name); // undefined
当删除数组元素时,数组的长度并不会变小。
创建对象
var obj = Object.create({x : 1});
属性检测
var cat = new Object;
cat.legs = 4;
cat.name = "Kitty";
'legs' in cat; // true
'abc' in cat; // false
"toString" in cat; // true, inherited property!!!
cat.hasOwnProperty('legs'); // true
cat.hasOwnProperty('toString'); // false
cat.propertyIsEnumerable('legs'); // true
cat.propertyIsEnumerable('toString'); // false
propertyIsEnumerable
每个对象都有propertyIsEnumerable()方法,这个方法可以判断出指定的属性是否可枚举。
- 这个属性必须属于实例的,并且不属于原型。
- 这个属性必须是可枚举的,也就是自定义的属性。
- 如果对象没有指定的属性,该方法返回false
关于hasOwnProperty 和 propertyIsEnumerable 的区别:
PropertyIsEnumerable
判断给定的属性是否可以用 for...in 语句进行枚举。
hasOwnProperty(property)
判断对象是否有某个特定的属性。必须用字符串指定该属性
enumerable :bool 是否可被for in
对象属性的权限
1. Object.getOwnPropertyDescriptor({pro : true}, 'pro'); //查看属性权限
// Object {value: true, writable: true, enumerable: true, configurable: true}
var person = {};
2. Object.defineProperty(person, 'name', { //定义属性权限
configurable : false,
writable : false,
enumerable : true,
value : "Bosn Ma"
});
3. Object.keys(person); // ["name"] // 查看对象属性
4. Object.defineProperties(person, { //定义多个属性权限
title : {value : 'fe', enumerable : true},
corp : {value : 'BABA', enumerable : true},
salary : {value : 50000, enumerable : true, writable : true}
});
5.
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); //configurable: false
Object.getOwnPropertyDescriptor(obj, 'x');
// Object {value: 1, writable: true, enumerable: true, configurable: false}
Object.isSealed(obj); // true
Object.freeze(obj); //configurable: false,writable: false,
Object.getOwnPropertyDescriptor(obj, 'x');
// Object {value: 1, writable: false, enumerable: true, configurable: false}
Object.isFrozen(obj); // true
6. 序列化
var obj = {x : 1, y : true, z : [1, 2, 3], nullVal : null};
JSON.stringify(obj); // "{"x":1,"y":true,"z":[1,2,3],"nullVal":null}"
obj = {val : undefined, a : NaN, b : Infinity, c : new Date()};
JSON.stringify(obj); // "{"a":null,"b":null,"c":"2015-01-20T14:15:43.910Z"}"
obj = JSON.parse('{"x" : 1}');
obj.x; // 1
自定义序列化
var obj = {
x : 1,
y : 2,
o : {
o1 : 1,
o2 : 2,
toJSON : function () {
return this.o1 + this.o2;
}
}
};
JSON.stringify(obj); // "{"x":1,"y":2,"o":3}"