试图回答这篇文章后的问题
我注意到了这个
Function('return "\\101\\40\\171\\145\\154\\154\\157\\167\\40\\142\\165\\164\\164\\157\\156\\56"')()
或
Function('return "\101\40\171\145\154\154\157\167\40\142\165\164\164\157\156\56"')()
都返回相同的字符串 - “黄色按钮。”
关于我上面链接的问题,JS代码片段在标签中运行。
我在过去也注意到,在处理一些JSON字符串时,'\'需要'\'
什么时候需要? 为什么有必要? 如果没有必要,为什么要这样做?
链接和其他阅读对我有帮助。
更新 也许我没有提供足够的信息来问这个问题。
我知道何时以及为何需要逃避。
我想知道的是两件事
在上面的链接中,代码有两个功能;一个嵌套在另一个中就像这样
Function(
Function(
'return\'\\141\\75\\160\\162\\157\\155\\160\\164\\50\\47\\105\\156\\164\\162\\145\\172\\40\\154\\145\\40\\155\\157\\164\\40\\144\\145\\40\\160\\141\\163\\163\\145\\47\\51\\73\\151\\146\\50\\141\\75\\75\\47\\164\\157\\164\\157\\61\\62\\63\\154\\157\\154\\47\\51\\173\\141\\154\\145\\162\\164\\50\\47\\142\\162\\141\\166\\157\\47\\51\\73\\175\\145\\154\\163\\145\\173\\141\\154\\145\\162\\164\\50\\47\\146\\141\\151\\154\\56\\56\\56\\47\\51\\73\\175\'')())()
此脚本与此脚本一样
Function(
Function('return "\141\75\160\162\157\155\160\164\50\47\105\156\164\162\145\172\40\154\145\40\155\157\164\40\144\145\40\160\141\163\163\145\47\51\73\151\146\50\141\75\75\47\164\157\164\157\61\62\63\154\157\154\47\51\173\141\154\145\162\164\50\47\142\162\141\166\157\47\51\73\175\145\154\163\145\173\141\154\145\162\164\50\47\146\141\151\154\56\56\56\47\51\73\175"')())()
为什么,如果两个脚本都工作,那么“\\”是否需要“\”?我在这里缺少什么吗?
第二个问题是,
当“\\”需要超过“\”时会出现根本问题吗?
我认为sventschui已经到了那里,但还没有。
答案 0 :(得分:3)
我认为sventschui有正确的想法,让我尝试以不同的方式解释它。
使用时定义字符串
str1='"\\101\\40\\171\\145\\154\\154\\157\\167\\40\\142\\165\\164\\164\\157\\156\\56"'
\\
是转义序列,内存中的实际字符串是(包括它周围的引号)"\101\40\171\145\154\154\157\167\40\142\165\164\164\157\156\56"
将字符串定义为str2="\101\40\171\145\154\154\157\167\40\142\165\164\164\157\156\56"
\101
,\40
,...是转义序列,内存中的实际字符串是(包括它周围的引号)"A yellow button"
当您创建Function()
时,它会重新评估字符串(例如eval
),对于第一种情况,str1
现在它会处理\101
,{{ 1}}作为转义序列,返回的字符串是\40
,没有引号。
当您对第二个字符串执行相同操作时,没有转义序列,只有常规字符,因此字符串不会更改(除了它周围的引号)
A yellow button

答案 1 :(得分:2)
因为您嵌套了两个字符串,所以两个示例都返回相同的字符串。
'return "\\101\\40\\171\\145\\154\\154\\157\\167\\40\\142\\165\\164\\164\\157\\156\\56"'
评估为
return "\101\40\171\145\154\154\157\167\40\142\165\164\164\157\156\56"
评估为
的内容A yellow button
'return "\101\40\171\145\154\154\157\167\40\142\165\164\164\157\156\56"'
评估为
return "A yellow button"
评估为
的内容A yellow button
修改强>
使用双重转义,因为当\ 000将会评估为\时,以下示例会搞砸:
'return "\000\000"'
评估为
return "\\"
评估为
的内容\
'return "\\000\\000"'
评估为
return "\000\000"
评估为
的内容\\