Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript字符串中的单转义和双转义(反斜杠)有什么区别?_Javascript_String_Function_Escaping_Ascii - Fatal编程技术网

Javascript字符串中的单转义和双转义(反斜杠)有什么区别?

Javascript字符串中的单转义和双转义(反斜杠)有什么区别?,javascript,string,function,escaping,ascii,Javascript,String,Function,Escaping,Ascii,在尝试回答此帖子的问题后 我注意到这一点 Function('return "\\101\\40\\171\\145\\154\\154\\157\\167\\40\\142\\165\\164\\164\\157\\156\\56"')() 或 两者都返回相同的字符串-“黄色按钮” 关于我上面链接的问题,JS代码片段是在标记中运行的 我过去也注意到,在处理一些JSON字符串时,需要使用“\”而不是“\” 什么时候有必要? 为什么有必要? 如果没有必要,为什么要这样做 链接和附加阅读对我很有

在尝试回答此帖子的问题后

我注意到这一点

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已经达到了目的,但还没有达到目的。

因为您嵌套了两个字符串,两个示例都返回相同的字符串


评估为

return "\101\40\171\145\154\154\157\167\40\142\165\164\164\157\156\56"
评估结果是什么

A yellow button
return "A yellow button"
A yellow button
return "\\"
\
return "\000\000"
\\

评估为

A yellow button
return "A yellow button"
A yellow button
return "\\"
\
return "\000\000"
\\
评估结果是什么

A yellow button
return "A yellow button"
A yellow button
return "\\"
\
return "\000\000"
\\

编辑:

之所以使用双转义,是因为当\000的计算结果为\时,以下示例会出错:

'return "\000\000"'
评估为

A yellow button
return "A yellow button"
A yellow button
return "\\"
\
return "\000\000"
\\
评估结果是什么

A yellow button
return "A yellow button"
A yellow button
return "\\"
\
return "\000\000"
\\

评估为

A yellow button
return "A yellow button"
A yellow button
return "\\"
\
return "\000\000"
\\
评估结果是什么

A yellow button
return "A yellow button"
A yellow button
return "\\"
\
return "\000\000"
\\

因为嵌套了两个字符串,所以两个示例都返回相同的字符串


评估为

return "\101\40\171\145\154\154\157\167\40\142\165\164\164\157\156\56"
评估结果是什么

A yellow button
return "A yellow button"
A yellow button
return "\\"
\
return "\000\000"
\\

评估为

A yellow button
return "A yellow button"
A yellow button
return "\\"
\
return "\000\000"
\\
评估结果是什么

A yellow button
return "A yellow button"
A yellow button
return "\\"
\
return "\000\000"
\\

编辑:

之所以使用双转义,是因为当\000的计算结果为\时,以下示例会出错:

'return "\000\000"'
评估为

A yellow button
return "A yellow button"
A yellow button
return "\\"
\
return "\000\000"
\\
评估结果是什么

A yellow button
return "A yellow button"
A yellow button
return "\\"
\
return "\000\000"
\\

评估为

A yellow button
return "A yellow button"
A yellow button
return "\\"
\
return "\000\000"
\\
评估结果是什么

A yellow button
return "A yellow button"
A yellow button
return "\\"
\
return "\000\000"
\\
我认为他有正确的想法,让我试着用另一种方式来解释

当您使用
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
,。。。是转义序列,内存中的实际字符串是(包括其周围的引号)
“黄色按钮”


创建
函数()
时,它会重新计算字符串(如
eval
),对于第一种情况,
str1
,现在它将
\101
\40
视为转义序列,返回的字符串是
一个黄色按钮,周围没有引号

当您对第二个字符串执行相同的操作时,没有转义序列,只有常规字符,因此该字符串保持不变(除了它周围的引号)

var str1='“\\101”;//"\101"
变量str2=“\101”;//“A”
var str1Evaled=eval(str1);//\101是转义序列,输出A
var str2Evaled=eval(str2);//没有转义序列,一个原始的
log({str1,str2,str1Evaled,str2Evaled});
//对象{str1:“\101”,str2:“A”,str1Evaled:“A”,str2Evaled:“A”}
我认为这个想法是正确的,让我试着用另一种方式解释它

当您使用
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
,。。。是转义序列,内存中的实际字符串是(包括其周围的引号)
“黄色按钮”


创建
函数()
时,它会重新计算字符串(如
eval
),对于第一种情况,
str1
,现在它将
\101
\40
视为转义序列,返回的字符串是
一个黄色按钮,周围没有引号

当您对第二个字符串执行相同的操作时,没有转义序列,只有常规字符,因此该字符串保持不变(除了它周围的引号)

var str1='“\\101”;//"\101"
变量str2=“\101”;//“A”
var str1Evaled=eval(str1);//\101是转义序列,输出A
var str2Evaled=eval(str2);//没有转义序列,一个原始的
log({str1,str2,str1Evaled,str2Evaled});

//对象{str1:“\101”,str2:“A”,str1Evaled:“A”,str2Evaled:“A”}
你能在我提供的链接上取一个峰值吗?如果我将函数和用户嵌套为单或双,我仍然会得到相同的结果。我理解角色转义,我只是不太明白为什么一个转义仍然有效的人会这么做。此外,上述两个函数返回相同的结果。请参阅我的更新,当双转义与单转义不同时,您可以在我提供的链接处获取峰值吗?如果我将函数和用户嵌套为单或双,我仍然会得到相同的结果。我理解角色转义,我只是不太明白为什么一个转义仍然有效的人会这么做。此外,上述两个函数返回相同的结果。请参阅我的更新,当双转义不同于单转义时。对于某些字符,您将需要双转义,最突出的是
\
对于某些字符,您将需要双转义