编辑:明确地说,我不是在寻找有关功能所暗示的各种问题的定性价值的建议或意见——我也不是在寻找实际问题的可靠解决方案;我只是在寻找标题中问题的技术性、可验证的答案。我已将问题附加到不符合要求的浏览器列表中。
使用函数的.toString
方法通常会呈现该函数的源代码。问题是没有指定这种行为——规范没有对应用于函数时的行为做出任何承诺。Chrome 的控制台甚至会告诉您(当您将函数以外的任何内容传递给 时Function.toString.call
),Function.prototype.toString 不是通用的
This blog post建议这可以用作为多行字符串生成可读语法的方法(通过将字符串作为多行注释存储在无操作函数的主体中)。作者建议在编写Node.js应用程序的上下文中使用这种用法,并指出这种行为是可靠的,因为 Node.js 在受控环境中运行。但是在 Javascript 的原生网络中,任何东西都可以出现并解释它,我们不应该依赖未指定的行为。
但在实践中,我设置了一个小提琴,它呈现一个选择框,其内容由一个大的多行字符串确定以测试代码,以及我工作站上的每个浏览器(Chrome 27、Firefox 21、Opera 12、Safari 5 , Internet Explorer 8) 按预期执行。
当前哪些 Javascript 引擎的行为不如下?
鉴于:
function uncomment(fn){
return fn.toString().split(/\/\*\n|\n\*\//g).slice(1,-1).join();
}
以下:
uncomment(function(){/*
erg
arg
*/});
应该输出:
erg
arg
不合格浏览器列表:
- 火狐 16
- …</li>