“\n”在JavaScript中被视为字符串文字
我有一个select标记和一个值为\n的选项标记。当选择该选项并使用jQuery获取值时,JavaScript似乎将其视为字符串文本,而不是将其解释为换行符 我尝试过转义、取消转义、转义然后取消转义,使用jQuery htmlEncoding技术、jQuery htmlDecoding技术,甚至尝试用空字符串连接。我在拔头发。这应该很简单 至少有5种变通方法以不同的优雅程度突然出现在我的脑海中,但在这一点上,我更感兴趣的是这种行为存在的原因。有什么简单的东西我遗漏了吗?我真正的问题是为什么JavaScript在一个上下文中以一种方式处理字符串,\n而在另一个上下文中以不同的方式处理字符串,\n而不是如何让它工作 这是密码 Html 我这里有一个代码笔:“\n”在JavaScript中被视为字符串文字,javascript,jquery,linefeed,Javascript,Jquery,Linefeed,我有一个select标记和一个值为\n的选项标记。当选择该选项并使用jQuery获取值时,JavaScript似乎将其视为字符串文本,而不是将其解释为换行符 我尝试过转义、取消转义、转义然后取消转义,使用jQuery htmlEncoding技术、jQuery htmlDecoding技术,甚至尝试用空字符串连接。我在拔头发。这应该很简单 至少有5种变通方法以不同的优雅程度突然出现在我的脑海中,但在这一点上,我更感兴趣的是这种行为存在的原因。有什么简单的东西我遗漏了吗?我真正的问题是为什么Jav
将值中的\n替换为新行代码:&13; 在HTML标记属性中,必须使用特殊字符 为什么JavaScript在一个上下文中以一种方式处理\n字符串,而在另一个上下文中则以不同方式处理 因为它不是JavaScript,也不是字符串文字。是纯HTML,反斜杠不是HTML中的转义字符。您可以使用文字换行符或换行符 我试过逃跑 但显然不是正确的。它总是取决于要使用的上下文,有时甚至需要将它们链接起来。一些合适的解决方案: HTML源中的文字字符:
<option value="
">New Line</option>
<option value=",">Comma</option>
<option value=" ">Tab</option>
HTML源中的字符实体引用,以避免奇怪的格式:
<option value="
">New Line</option> <!-- or -->
<option value=",">Comma</option>
<option value="	">Tab</option> <!-- or 	 -->
HTML源代码中的JSON文本以避免知道字符码:
<option value=""\n"">New Line</option>
<option value="","">Comma</option>
<option value=""\t"">Tab</option>
<option value="\n">New Line</option>
<option value=",">Comma</option>
<option value="\t">Tab</option>
HTML源中的JSON字符串内容:
<option value="
">New Line</option>
<option value=",">Comma</option>
<option value=" ">Tab</option>
为什么JavaScript在一个上下文中以一种方式处理\n字符串,但是
在另一个方面不同
首先,您应该了解字符串文字不是内存中的实际字符串,而是用于创建字符串的js语法的一部分。因此,从\字符信号开始的转义序列发送到js引擎,以不同的方式处理下一个字符
HTML没有这种特殊的语法。所以\只是\而\n是\n。当这个字符串通过domapi跨越html-js边界时(domapi不是js语法的一部分),它仍然是两个字母的字符串
顺便说一句,在js中有不同的方式来编码新行,这些新行在内存中产生相同的字符串
常量withEscSequence='\n'
//es2015
使用StringTemplate的常量=`
`
//直接从字符代码
const fromCharCode=String.fromCharCode10
//使用unicode转义序列
常量UNICODEESCEQUENCE='\u000A'
//使用十六进制转义序列
常量hexEscSequence='\x0A'
console.logwithEscSequence===usingStringTemplate,withEscSequence==fromCharCode,withEscSequence==UnicodeScSequence,withEscSequence==HexesESCSequences谢谢,这确实解决了问题,但并没有真正给我解释。我更关心的是为什么JavaScript在一个上下文中以一种方式处理字符串\n,而在另一个上下文中则不同。HTML没有像\n或\t这样的转义序列。所以不是javascript做的:但是一旦我们在javascript中得到了选项的值,它就是一个字符串,对吗?我认为它与var s='\n'相同。但情况似乎并非如此。由两个字符组成的长度为2的字符串\n,转换为字符串文字的应为'\\n'。请尝试console.debugdelimiter.split,delimiter=='\\n'谢谢,这个解释有点像我所怀疑的,但是var s=/n有什么神奇之处呢。在我看来,字符串也包含两个字符。但它会生成一个换行字符。我不想在这里难为情,我只是想了解JS在幕后做什么。var delimiter=$delimiter.val;生成一个与var s='\n'不同的字符串。另外,是否有任何方法可以将当前返回并转换为//n的字符串转换为换行符?谢谢您的详细回答。我想我现在明白了!:
selectEl.value
<option value=""\n"">New Line</option>
<option value="","">Comma</option>
<option value=""\t"">Tab</option>
JSON.parse(selectEl.value)
<option value="\n">New Line</option>
<option value=",">Comma</option>
<option value="\t">Tab</option>
JSON.parse('"'+selectEl.value+'"')