与函数的Javascript字符串连接表现很奇怪

时间:2013-09-27 16:19:40

标签: javascript string function concatenation

我正在尝试在javascript中"string"+function(){return "string"} document.write()中联接document.write("I don't know "+function(){if(true){return "why does it concat?"}});

例如:

I don't know function (){if(true){return "why does it concat?"}}

它会打印出类似这样的东西(看到它在jsfiddle中运行:http://jsfiddle.net/sadaf2605/3AuLD/):

{{1}}

我知道我写了一些非常愚蠢的东西,我需要一个功能才能完成它但仍然为什么要打印这样的东西?我很好奇!

2 个答案:

答案 0 :(得分:3)

您需要的是:

document.write("I don't know "+ (function(){if(true){return "why does it concat?"}})());
                                ^_______                                             ^_____

您没有执行此功能。您可以创建一个立即执行的函数。此外,由于您有一个操作数字符串,并且您正在使用+运算符,因此您的函数表达式也会自动转换为字符串。

当你只使用function(){if(true){return "why does it concat?"}}时,它只是一个函数引用而不是结果,所以你可以看到结果。您需要执行该函数并获取返回值。

答案 1 :(得分:3)

如果你问为什么它打印它做了什么,那是因为你的函数被转换为字符串(通过它的toString方法),因为你试图连接一个字符串和一个函数对象。当函数转换为字符串时,将返回其源代码(除非它是本机函数)。

根据语言规范(15.3.4.2):

  

Function.prototype.toString()

     

函数的依赖于实现的表示是   回。此表示具有FunctionDeclaration的语法。   特别注意使用和放置白色空间,线条   终结符和表示字符串中的分号是   实现相关的。