ja对象属性—枚举检查删除
Posted keliguicang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ja对象属性—枚举检查删除相关的知识,希望对你有一定的参考价值。
前言
我们经常需要操作对象的属性。这里记录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。
以上是关于ja对象属性—枚举检查删除的主要内容,如果未能解决你的问题,请参考以下文章