Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

函数toString的实现差异与BUG

  Function类型的对象有自己的toString方法,但是规范中并没有明确的指出返回值的格式,只是要求这个输出的字符串是可以用于定义这个函数的代码。既然没有规定,那就可能存在差异。浏览器通常会把定义函数时使用的代码作为这个值,但这依然存在差异。
  我们定义一个函数,并给每个可以加注释的地方都加上注释就知道了。 (/*1*/function/*2*/test/*3*/(/*4*/)/*5*/{/*6*/}/*7*/).toString();
  在Firefox和Chrome上,参数列表之前的注释都被吞了,而IE上只要是包含在函数定义相关的字符内的注释都保留。当然这是目前版本的测试,我们无法确保各个引擎未来会不会做什么改变。如果想用正则表达式去匹配函数转换成的字符串,那就最好按照IE这样的字符串来,需要考虑function关键字和函数名和参数列表之间位置的注释。
  下面顺便提一个IE的BUG。由于IE允许条件编译语句,所以在特殊情况下函数toString得到的字符串可能不是可执行代码。例如: function test(){@if(1)}@end //这在IE中是合法的函数定义   从上面的测试我们知道函数定义相关字符内的部分代码才会保留,那么这个代码保留了@if,丢掉了@end,导致这个函数toString后得到的代码是不可执行的。
网名:
3.84.186.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^