<html>
<body>
<p id="demo"></p>
<script>
var x = 'It\'s \@lright';
var y = "We are the so-called \"Vikings\" from the north.";
var i;
var s = "";
var z = "Thi$ is * a@ demo";
var patt = "[^A-Za-z0-9\\s]";
for(i=0;i<z.length;i++){
if(z[i].match(patt)){
s+= "\\"+z[i];
}
else{
s+= z[i];
}
}
document.getElementById("demo").innerHTML = x + "<br>" + y + "<br>" + s;
</script>
</body>
</html>
我得到的上述脚本的输出是:
它的@lright
我们就是所谓的“维京人”&#34;来自北方 Thi \ $是\ * a \ @ demo
我不知道字符串x
和y
的原因,如果我添加任何特殊字符后跟'\'
(反斜杠),字符串会显示为特殊人物。但是当我通过在每个特殊字符前附加'\'
来对字符串s进行处理时,字符串会在特殊字符前面显示'\'
。
有人可以解释一下吗?还请告诉我如何添加&#39; \&#39;在每个特殊字符之前,当我打印字符串时,我只看到特殊字符(不是'\'
前面有{{1}}现在正在发生)?
答案 0 :(得分:1)
为什么对于字符串x和y,如果我添加任何特殊字符后跟'\'(反斜杠),字符串将显示为特殊字符
因为转义字符是字符串文字语法的一部分,所以您使用字符串文字创建x
和y
。
当JavaScript源代码被解析为字符串原语时,转义序列将转换为它们所代表的字符。
但是当我通过在每个特殊字符
之前附加'\'来表示字符串s
因为那时你没有使用字符串文字。 "\\"
是一个字符串文字,后跟反斜杠的转义字符在字符串原语的数据中变为反斜杠。
当您将其与另一个字符串原语连接时,您不再处于解析源代码阶段,您在数据中有反斜杠。
还请告诉我如何在每个特殊字符之前添加'\',这样当我打印字符串时,我只看到特殊字符(不是现在附加在他们面前的'\')?
什么都不做。数据中已经包含特殊字符。
获取您想要的表单中已存在的内容是没有意义的,然后修改它以获得您想要的表单。
答案 1 :(得分:1)
反斜杠字符是字符串转义字符的指示符。当在字符串中找到它时,JavaScript运行时知道将跟随它的字符指示要转义的实际字符。如果你只想包含一个反斜杠,那么你必须为它提供转义码,这是两个反斜杠。
console.log("\"This string has double quotes embedded within double quotes\"");
// If we want to output a single backslash, we need to escape with with \\
// So, if we want to produce two of them, we need \\\\
console.log("The escape code for a \\ is \\\\");
console.log("The escape code for a \' is \\'");
console.log("The escape code for a \" is \\\"");
现在,区分“JavaScript”字符串转义序列与HTML实体代码非常重要。
如果您使用包含JavaScript转义字符的JavaScript字符串并发送该字符串以供HTML解析器解析,则转义序列将已处理,并且HTML解析器将接收该工作的结果。 HTML解析器将只渲染通常会传递的实际字符。
JavaScript转义字符只有在JavaScript运行时处理时才有意义,而不是HTML解析器:
var x = "This will be split over two lines when processed by the JavaScript runtime, \n\nbut the escape code will will just cause normal carriage return white space for the HTML parser";
var y = "\"To escape or not to escape\"";
// Escape code will be parsed and result in two groups of text
alert(x);
// Here, the result of the escaping will be passed to the HTML parser for further processing
// But here, the new line characters embedded within the string will be treated as all exteraneous
// white space in an HTML document is - - it will be normalized down to a single space.
document.querySelector("#d1").innerHTML = x;
document.querySelector("#d2").innerHTML = y;
<div id="d1"></div>
<div id="d2"></div>