怎么去掉对象中的function类型元素--JSON对象学习

【问题】当一个对象中含有function,而想把它去掉的时候,怎么做简单呢?

【举例】

举个例子,当有一个对象为:

var  o = {
    a: 1,
    b: 'xx',
    c: function(){},
    d: true
}

我想把类型为o.c的对象去掉,应该怎么做呢~~

【解决方案】

一般的想法使用for-in循环,去掉type为function来做。其实有更简单的方法,那就是使用JSON.stringify(o),这样可以直接去掉function,再使用JSON.parse()将对象转换回来就好了,实例代码如下:

JSON.parse(JSON.stringify(o))
结果,大家可以自己试试。


【深入学习】

JSON对象:

对象检测:if(!window.JSON)

浏览器支持:IE:>=ie8标准模式支持,混杂模式和<ie8浏览器中不支持,主流现代浏览器支持

方法

        1、JSON.stringify(value[, replacer, space]

              @param {Object | Array} value 必须,要转换的 JavaScript 值(通常为对象或数组)。

              @param {Function} replacer  可选,用于转换结果的函数或数组

              @param {String | Number} space 可选,向返回值 JSON 文本添加缩进、空格和换行符以使其更易于读取

        说明:

如果 value 具有 toJSON 方法,则 JSON.stringify 函数将使用该方法的返回值。 

如果 toJSON 方法的返回值为 undefined,则不转换成员

这使对象能够确定自己的 J SON 表示形式。

将不会转换不具有 JSON 表示形式的值,例如 undefined。 在对象中,将丢弃这些值。 在数组中,会将这些值替换为 null。

       执行顺序:

在序列化过程中,如果 value 参数对应有 toJSON 方法,则 JSON.stringify 将首先调用 toJSON 方法。 

如果该方法不存在,则使用原始值。

接下来,如果提供 replacer 参数,则该值(原始值或 toJSON 返回值)将替换为 replacer 参数的返回值。

最后,根据可选 space 参数向该值添加空格以生成最终的 JS ON 文本。


        2、JSON.parse(text[, receiver ])

        @param {String} text jsonString

        @param {Function} receiver  可选。 一个转换结果的函数。

将为对象的每个成员调用此函数。 如果成员包含嵌套对象,则先于父对象转换嵌套对象

对于每个成员,会发 生以下情况:

如果 reviver 返回一个有效值,则成员值将替换为转换后的值。

如果 reviver 返回它接收的相同值,则不修改成员值。

如果 reviver 返回 null 或 undefined,则删除成员。


不支持的替代方案

        1、window.eval方法对jsonString进行解析,也就是代替json.parse方法

        2、使用json2.js来进行转化


【参考资料】

http://msdn.microsoft.com/zh-cn/library/cc836458(v=vs.94).aspx

http://msdn.microsoft.com/zh-cn/library/cc836459(v=vs.94).aspx

http://msdn.microsoft.com/zh-cn/library/cc836466(v=vs.94).aspx


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。