【问题】当一个对象中含有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