标签:没有 跳过 div cti ISE es5 16px property func
我们经常需要操作对象的属性。这里记录ES5中操作对象属性的API和它们之间的差异。
for/in遍历对象中的所有可枚举属性(包括自有属性和继承属性)
var obj = {name:"小花",age:18}; var obj2 = Object.create(obj); obj2.like = "骨头"; for(item in obj2){ // 将obj中的所有可枚举属性名以字符串形式分别赋值给itemtypeof item; => string console.log(obj2[item]); =>小花,骨头,18 }
// 跳过继承属性和方法
for(item in obj){ // 是继承属性或者方法就跳过此次循环。 if(!obj.hasOwnproperty(item) || typeof obj[item] === "function"){ continue; } }
object.key():返回一个数组,这个数组由对象中可枚举的自有属性名称组成。
var data = {
balabala1:"x",
balabala2:"y",
balabala3:"z",
}
Object.keys(data).map(function(item){
// item:自有属性名称 obj[item]:属性值
console.log(data[item]);
})
Object.getOwnpropertyNames():返回包含所有自有属性名称的列表,包括不可枚举的。
in运算符:左侧是字符串形式的属性名称,右侧是对象。如果对象或者对象的继承属性中有这个属性就返回true。
var obj = {name:"小花"};
console.log("name" in obj );
Object.hasOwnProperty():接收一个字符串形式的属性名,检测是否是对象的自有属性,继承属性会返回false
propertyIsEnumerable():hasOwnProperty的增强版本,只有当这个属性是自有属性并且可枚举的时候才会返回true
delete可以删除对象的属性。他的操作数应该是一个属性访问表达式。
delete 语句返回值类型是Boolean。
// 返回true的情况
o = {x:1}; // o有一个自有属性x 并继承了toString属性
delete o.x; // 删除x返回true
delete o.x; // 此时o中已经没有x属性了,o.x=》undefined。等同 delete undefined;
delete o.toString; // 删除不了原型中继承来的属性。同样返回true
// 返回false
delete Object.prototype; // 属性不可配置,不能删除
var i = 0; // 声明一个全局变量
delete i; this.i; // 无法删除全局变量的属性
function f(){}; // 声明一个全局函数
delete f; this.f // 也无法删除全局函数
delete的行为有些怪异,有几点需要注意:
1,它只是断开属性和对象的联系,不会取操作属性中的属性。
2,只能删除自有属性。
3,无法删除不可配置的属性。
4,无法删除原型属性。
5,就算其后的属性访问表达式的值是undefined 它返回的也是true。
标签:没有 跳过 div cti ISE es5 16px property func
原文地址:https://www.cnblogs.com/keliguicang/p/10960481.html