gpt4 book ai didi

javascript - 在 Internet Explorer 中实现 Mozilla 的 toSource() 方法

转载 作者:可可西里 更新时间:2023-11-01 01:39:22 25 4
gpt4 key购买 nike

有人为 Internet Explorer 和其他非 Gecko 浏览器实现了 Mozilla 的 Object.toSource() 方法吗?我正在寻找一种将简单对象序列化为字符串的轻量级方法。

最佳答案

请考虑以下事项:(使用 FireFox 3.6 时)

javascript:
x=function(){alert('caveat compter')};
alert(['JSON:\t',JSON.stringify(x),'\n\ntoSource():\t',x.toSource()].join(''));

显示:

JSON:

toSource(): (function () {alert("caveat compter");})

甚至:

javascript:
x=[];x[3]=x;
alert('toSource():\t'+x.toSource());
alert('JSON can not handle this at all and goes "infinite".');
alert('JSON:\n'+JSON.stringify(x));

显示:

toSource(): #1=[, , , #1#]

以及 JSON 的 stackoverflow 递归题外话之后的“going 'infinite'”消息。

这些示例强调了从 toSource() 呈现的 JSON 表示中明确排除的表达式的微妙之处。

编写一个程序来在所有情况下复制相同的结果并不容易,因为 Gecko toSource() 原语非常强大。

以下是复制 toSource() 功能的程序必须成功处理的一些“移动目标”:

javascript:
function render(title,src){ (function(objRA){
alert([ title, src,
'\ntoSource():',objRA.toSource(),
'\nJSON:',JSON.stringify(objRA) ].join('\n'));
})(eval(src));
}
render('Simple Raw Object source code:',
'[new Array, new Object, new Number, new String, ' +
'new Boolean, new Date, new RegExp, new Function]' );

render( 'Literal Instances source code:',
'[ [], 1, true, {}, "", /./, new Date(), function(){} ]' );

render( 'some predefined entities:',
'[JSON, Math, null, Infinity, NaN, ' +
'void(0), Function, Array, Object, undefined]' );

显示:

    Simple Raw Object source code:    [new Array, new Object, new Number, new String,                 new Boolean, new Date, new RegExp, new Function]    toSource():    [[], {}, (new Number(0)), (new String("")),                 (new Boolean(false)), (new Date(1302637995772)), /(?:)/,                             (function anonymous() {})]    JSON:    [[],{},0,"",false,"2011-04-12T19:53:15.772Z",{},null]

然后显示:

    Literal Instances source code:     [ [], 1, true, {}, "", /./, new Date(), function(){} ]    toSource():      [[], 1, true, {}, "", /./, (new Date(1302638514097)), (function () {})]    JSON:      [[],1,true,{},"",{},"2011-04-12T20:01:54.097Z",null]

最后:

    some predefined entities:    [JSON, Math, null, Infinity, NaN, void(0),                         Function, Array, Object, undefined]    toSource():    [JSON, Math, null, Infinity, NaN, (void 0),         function Function() {[native code]}, function Array() {[native code]},             function Object() {[native code]}, (void 0)]    JSON:    [{},{},null,null,null,null,null,null,null,null]

如果翻译是“要使用的”,或者如果需要简单良性的人类消费来查看对象的内部结构,那么前面的分析就很重要。作为一种表示,JSON 的一个主要功能是在环境之间“使用”一些结构化信息。

toSource() 函数的质量是影响程序指称语义的一个因素,但不限于:
往返计算、最小不动点属性和反函数。

  • 是否重复代码转换静止到静止状态?
  • obj.toSource() ==eval(eval(eval(obj.toSource()).toSource()).toSource()).toSource()?
  • 考虑是否有意义是否 obj == eval(obj.toSource())?
  • 撤消转换是否导致,不只是一个相似的对象,但是一模一样的?
    这是一个加载具有深远意义的问题克隆操作对象时。

还有很多很多......

请注意,当 obj 包含一个已执行的代码对象时,如 (new Function ... )(),上述问题会变得更加重要!

关于javascript - 在 Internet Explorer 中实现 Mozilla 的 toSource() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/171407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com