前言

  我们经常需要操作对象的属性。这里记录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。

js对象属性—枚举、检查、删除的更多相关文章

  1. JS 对象属性相关--检查属性、枚举属性等

    1.删除属性 delete运算符可以删除对象的属性 delete person.age //即person不再有属性age delete person['age'] //或者这样 delete只是断开 ...

  2. js delete删除对象属性,delete删除不了变量及原型链中的变量

    js delete删除对象属性,delete删除不了变量及原型链中的变量 一.delete删除对象属性 function fun(){ this.name = 'gg'; } var obj = ne ...

  3. js对象属性 通过点(.) 和 方括号([]) 的不同之处

    //    js对象属性 通过点(.) 和 方括号([]) 的不同之处 //    1.点操作符: 静态的.右侧必须是一个以属性名称命名的简单标识符.属性名用一个标识符来表示.标识符必须直接出现再js ...

  4. JS对象属性命名规则

    JS标识符的命名规则,即变量的命名规则: 标识符只能由字母.数字.下划线和'$'组成 数字不可以作为标识符的首字符 对象属性的命名规则 通过[]操作符为对象添加属性时,属性名称可以是任何字符串(包括只 ...

  5. js对象属性方法大总结(收集)

    数组(Array):系列元素的有序集合: 详细演示请看:[js入门系列演示·数组 ] http://www.cnblogs.com/thcjp/archive/2006/08/04/467761.ht ...

  6. js对象属性名以数字开头如何获取、js属性名以数字开头、missing ) after argument list

    js对象中属性名以数字开头引发的报错 :missing ) after argument list var ChineseDistricts = { : { : '北京市', : '天津市', : ' ...

  7. js对象属性方法大总结

    数组(Array):系列元素的有序集合: 详细演示请看:[js入门系列演示·数组 ] http://www.cnblogs.com/thcjp/archive/2006/08/04/467761.ht ...

  8. js对象转换为json格式时,js对象属性中有值为null和undefined注意事项

    当属性值为null时: 当属性值为undefined时: 只有当属性值为未定义时, js对象转换成json格式时会忽略该属性.

  9. js 对象属性遍历

    function 对象属性遍历(){ var obj = {x:1,y:2,c:3};for (var name in obj){ alert ( obj[name] )} } function 数组 ...

随机推荐

  1. Phoenix 索引生命周期

    本文主要介绍Phoenix索引状态的生命周期,帮助大家解惑“为什么我的phoenix索引不能正常使用了?” 索引状态 索引总共有以下几个状态,其状态信息存储在SYSTEM.CATALOG表中.可以通过 ...

  2. Maximum likelihood from incomplete data via the EM algorithm (1977)

    Maximum likelihood from incomplete data via the EM algorithm (1977)  

  3. HTML5 Canvas 画图入门

    HTML5 Canvas 画图入门 HTML5 Canvas 画图入门,仅供学习參考 <!DOCTYPE html> <html> <head> <meta ...

  4. php钩子技术

    通过对钩子技术的理解,下面把自己对钩子技术的总结如下:"钩子就是在调用php核心功能代码的同时可以在不修改核心代码的同时,更改核心代码的行为";具体模拟实现如下 /** * php ...

  5. 如何配置DSI时钟频率

    [DESCRIPTION] 计算DSI数据速率的方式,以及如何配置时钟clk的方式 [KEYWORD] dsi.data rate.mipi clk [SOLUTION] 1.DSI vdo mode ...

  6. Appium——解决每次启动时都安装setting和unlock app方法

    找到appium安装目录 C:\Program Files (x86)\Appium\node_modules\appium\lib\devices\android 修改代码,注释掉弹出setting ...

  7. fatal error C1902: 程序数据库管理器不匹配;请检查安装解决

    http://blog.sina.com.cn/s/blog_9f4bc8e301015uhz.html 1.错误提示:VS2008编译错误fatal error C1902: 程序数据库管理器不匹配 ...

  8. python中类的定义方法

    # coding =utf-8 ## 类的定义 ##-------------------------------------------------- class Employee: empCoun ...

  9. 003 - 修改Pycharm的项目文件树样式

    相信习惯了Eclipse或者Windows的小伙伴对于Pycharm的目录树一定觉得特别别扭 因为它总是在文件前加一个三角形标注, 这样的标注在视觉上十分误导层级关系 修改的方式为   File -& ...

  10. git 错误 Reinitialized existing Git repository in /**/***/ 和refusing to merge unrelated histories

    报错一: 这句话的意思是 在路径 /Users/jackma/Downloads/lotteryTicket 2/.git/ 现有的Git存储库初始化 ➜ lotteryTicket 2 git:(m ...