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对象属性—枚举检查删除的主要内容,如果未能解决你的问题,请参考以下文章

js代码片段

30 段 Python 实用代码

检查“created_by”属性后,无法删除播放器对象

for in 与 Object.keys 与 hasOwnProperty区别

即学即用的 30 段 Python 实用代码

按属性值从数组中删除项目