【问题标题】:Eval and Prompt complications评估和提示并发症
【发布时间】:2024-01-11 01:15:02
【问题描述】:

所以我一直在搞乱 eval 函数,并且正在使用提示符处理一个小聊天项目。如果我这样做:

var test = 'prompt("Username: Jimbles \n Message:")'
eval(test)

我收到以下错误:

未捕获的 SyntaxError:无效或意外令牌

这是因为它在求值时在字符串本身中添加了一个新行,而不是在提示符中。

这是 JavaScript 看到的内容:

'prompt("Username: Jimbles 
Message:")'

我需要使用 eval,因为我从服务器获取要执行的代码,并且需要一种方法来执行它。我如何能够成功地在 eval 中使用换行符而不会出现此错误并将换行符放入 eval 字符串本身?我希望提示中有换行符,但不是评估字符串。谢谢!

【问题讨论】:

    标签: javascript newline eval prompt


    【解决方案1】:

    由于您希望 test 真正包含 \n,因此您需要转义反斜杠。

    即:

    var test = 'prompt("Username: Jimbles \\n Message:")'
    eval(test)
    

    【讨论】:

    • 谢谢,效果很好!究竟什么是“逃避”?它在我看来有点像正则表达式
    • @Gorgamite Escape 字符告诉程序下一个字符意味着特殊的东西。例如\n 表示换行符\t 表示制表符等。因此,如果您确实想要在字符串中使用反斜杠,则需要使用\\。
    • 啊,我明白了。所以你基本上是在告诉 eval 把 "\n" 作为字符串的一部分。谢谢!