为javascript的JSON对象扩展forEach方法
来源:互联网 发布:手机淘宝怎么买电影票 编辑:程序博客网 时间:2024/06/06 15:35
最近发现javascript的JSON对象没有forEach这个方法,所以就自己动手扩展了一下,做个记录,方便以后使用。
1. Object prototype forEach
· 最初的代码
if (!Object.prototype.forEach) { Object.prototype.forEach = function(fn) { try { for (var key in this) { fn.call(this, this[key], key, this); } } catch (e) { throw new TypeError(); } }}
· 测试
var obj = {"a": 1,"b": 2};obj.forEach(function(value, key, json){ console.log(value, key, json); /* 打印结果: 1 "a" Object {a: 1, b: 2} 2 "b" Object {a: 1, b: 2} function (fn) { try { for (var key in this) { fn.call(this, this[key], key, this); } } catch (e) { throw new TypeError(); } } "forEach" Object {a: 1, b: 2} */})
· 分析
以上测试结果,基本符合预期,不过有一个问题:在自定义方法的最后,把方法函数体本身也枚举出来了。为了解决这一问题,可以采用一个折中的办法:hasOwnProperty(),即确定某属性是否是对象本身的属性。
· 最终版(支持IE6+)
// @support: IE6+, Firefox, Chromeif (!Object.prototype.forEach) { Object.prototype.forEach = function(fn) { try { for (var key in this) { if (this.hasOwnProperty(key)) { fn.call(this, this[key], key, this); } } } catch (e) { throw new TypeError(); } }}
· 测试
var obj = {"a": 1,"b": 2};obj.forEach(function(value, key, json){ console.log(value, key, json); /* 打印结果: 1 "a" Object {a: 1, b: 2} 2 "b" Object {a: 1, b: 2} */}
然后结果完全符合预期了,Oh,Yeah ! 但是对于处女座,你以为就酱紫结束了吗?NO NO NO.
So, 请接着往下看
2. ECMAScript 5 defineProperty
在新版本的ECMAScript 5中,可以设置自定义对象的方法为不可枚举。支持IE9以上,具体设置如下:
// @support: IE9+, Firefox, Chromeif (!Object.prototype.forEach) { Object.prototype.forEach = function(fn) { try { for (var key in this) { fn.call(this, this[key], key, this); } } catch (e) { throw new TypeError(); } }}/***************************************************/try { Object.defineProperty(Object.prototype, "forEach", { enumerable: false //是否可枚举?false });} catch (e) { //throw new TypeError(); console.log(e);}
· 测试
var obj = {"a": 1,"b": 2};obj.forEach(function(value, key, json){ console.log(value, key, json); /** * 打印结果: * 1 "a" Object {a: 1, b: 2} * 2 "b" Object {a: 1, b: 2} */}
以上就是全文,欢迎留言。同时感谢@jslang(天际的海浪)的指点。
0 0
- 为javascript的JSON对象扩展forEach方法
- Javascript数组Array的forEach扩展方法
- 为JavaScript内置对象扩展方法
- JavaScript中json字符串转换为json对象的几种方法
- javaScript的JSON字符串转换为JSON对象。
- JSON.parse()方法,将数据(字符串)转化为javascript对象
- JSON.stringify()方法将javascript对象转换为字符串
- JSON.parse()方法将数据转换为javascript对象
- 转换字符串为json对象的方法
- 转换字符串为json对象的方法
- 转换字符串为json对象的方法
- js中将json字符串转换为json对象的方法
- javascript 转换Json字符串为JSON对象
- JSON对象解析为JavaScript对象
- JS 处理JSON数据及javascript处理对象、JSON对象、hash对象、数组对象的方法
- 转换json格式的日期为Javascript对象
- PHP的array转为Json并转化为Javascript对象
- javascript 数组的使用 + js 对象 转换为json 字符串
- hexo写博客
- 【Linux学习日志】源码编译安装GVIM7.4/VIM7.4
- 十年之后重学C语言
- 练习4-2 对atof函数进行扩充,使它可以处理形如123.45e-6的科学表示法,其中浮点数后面可能会紧跟一个e或E以及一个指数
- 《笑话大全》APP代码详解2
- 为javascript的JSON对象扩展forEach方法
- 欧拉路径
- laravel配置路由出现404解决办法
- Android 布局开发之百分比布局、弹性布局
- 找回Linux系统Root账户密码
- OpenMPI学习笔记(五)之乒乓球比赛模拟(一)
- ASP.NET Webform的一个副作用及解决方法
- Android 流星效果的实现
- 【树莓派2B折腾日志】fatal error: Python.h: 没有那个文件或目录