js对象属性—枚举、检查、删除
前言
我们经常需要操作对象的属性。这里记录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对象属性—枚举、检查、删除的更多相关文章
- JS 对象属性相关--检查属性、枚举属性等
1.删除属性 delete运算符可以删除对象的属性 delete person.age //即person不再有属性age delete person['age'] //或者这样 delete只是断开 ...
- js delete删除对象属性,delete删除不了变量及原型链中的变量
js delete删除对象属性,delete删除不了变量及原型链中的变量 一.delete删除对象属性 function fun(){ this.name = 'gg'; } var obj = ne ...
- js对象属性 通过点(.) 和 方括号([]) 的不同之处
// js对象属性 通过点(.) 和 方括号([]) 的不同之处 // 1.点操作符: 静态的.右侧必须是一个以属性名称命名的简单标识符.属性名用一个标识符来表示.标识符必须直接出现再js ...
- JS对象属性命名规则
JS标识符的命名规则,即变量的命名规则: 标识符只能由字母.数字.下划线和'$'组成 数字不可以作为标识符的首字符 对象属性的命名规则 通过[]操作符为对象添加属性时,属性名称可以是任何字符串(包括只 ...
- js对象属性方法大总结(收集)
数组(Array):系列元素的有序集合: 详细演示请看:[js入门系列演示·数组 ] http://www.cnblogs.com/thcjp/archive/2006/08/04/467761.ht ...
- js对象属性名以数字开头如何获取、js属性名以数字开头、missing ) after argument list
js对象中属性名以数字开头引发的报错 :missing ) after argument list var ChineseDistricts = { : { : '北京市', : '天津市', : ' ...
- js对象属性方法大总结
数组(Array):系列元素的有序集合: 详细演示请看:[js入门系列演示·数组 ] http://www.cnblogs.com/thcjp/archive/2006/08/04/467761.ht ...
- js对象转换为json格式时,js对象属性中有值为null和undefined注意事项
当属性值为null时: 当属性值为undefined时: 只有当属性值为未定义时, js对象转换成json格式时会忽略该属性.
- js 对象属性遍历
function 对象属性遍历(){ var obj = {x:1,y:2,c:3};for (var name in obj){ alert ( obj[name] )} } function 数组 ...
随机推荐
- r testifying that your code will behave as you intend.
https://github.com/stretchr/testify Testify - Thou Shalt Write Tests Go code (golang) set of pack ...
- The basic principle of test case 修改引擎
The basic principle of test case evaluation is that output resulting from running a test case is com ...
- [自动化平台系列] - 初次使用 Macaca-前端自动化测试(2)
接一下来讲一讲api的使用 http://macacajs.github.io/macaca-wd/api/ var _config = { //本程序的host host: 'http://te ...
- Mac下通过命令行安装npm install -g 报错,如何解决?
1, 使用 sudo npm install -g n2, 或者 sudo chmod -R 777 /usr/local/lib,然后 npm install -g
- 基于S3C2440的linux-3.6.6移植——LED驱动【转】
本文转载自:http://www.voidcn.com/blog/lqxandroid2012/article/p-625005.html 目前的linux版本的许多驱动都是基于设备模型,LED也不例 ...
- HDU2512 一卡通大冒险 —— 第二类斯特林数
题目链接:https://vjudge.net/problem/HDU-2512 一卡通大冒险 Time Limit: 2000/1000 MS (Java/Others) Memory Lim ...
- Codeforces Round #376 (Div. 2) D. 80-th Level Archeology —— 差分法 + 线段扫描法
题目链接:http://codeforces.com/contest/731/problem/D D. 80-th Level Archeology time limit per test 2 sec ...
- C#入门---1、C#装备知识(C#如何学习)
C#入门---1.C#装备知识(C#如何学习) 一.总结 一句话总结: 主视频,辅助书和教程:还是得看视频,直接看书或者看教程效率不高 1.C#和.NET的关系和区别? .net是一个平台,核心是.n ...
- 大数相乘(hdu 1402)
------------------题目链接--------------------- 题目没啥说的,两个数相乘,fft,一发模板就AC,kuangbin模板大法好,不懂原理的小白也能体验AC. 个人 ...
- P2383 狗哥玩木棒
题目背景 狗哥又趁着语文课干些无聊的事了... 题目描述 现给出一些木棒长度,那么狗哥能否用给出的木棒(木棒全用完)组成一个正方形呢? 输入输出格式 输入格式: 输入文件中的第一行是一个整数n表示测试 ...