什么是JavaScript字符串换行符?

2022-04-03 00:00:00 newline javascript
是所有平台上的统一换行字符序列吗?如果不是,我如何确定当前环境的字符?

我不是在问有关HTML换行符元素(<BR/>)的问题。我问的是有关在JavaScript字符串中使用的换行符序列的问题。


解决方案

我刚刚使用这个愚蠢的脚本测试了几个浏览器:

数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">
function log_newline(msg, test_value) {
  if (!test_value) { 
    test_value = document.getElementById('test').value;
  }
  console.log(msg + ': ' + (test_value.match(//) ? 'CR' : '')
              + ' ' + (test_value.match(/
/) ? 'LF' : ''));
}

log_newline('HTML source');
log_newline('JS string', "foo
bar");
log_newline('JS template literal', `bar
baz`);
<textarea id="test" name="test">

</textarea>

Windows上的IE8和Opera 9使用 。我测试的所有其他浏览器(Windows上的Safari 4和Firefox 3.5,以及Linux上的Firefox 3.0)都使用 。它们在设置值时都可以很好地处理 ,尽管IE和Opera会在内部再次将其转换回 。有一篇名为Line endings in Javascript的SitePoint文章介绍了更多细节。

还请注意,这与HTML文件本身中的实际行尾无关( 都会得到相同的结果)。

提交表单时,所有浏览器都会使用URL编码将换行符规范化为%0D%0A。要查看这一点,请加载例如data:text/html,<form><textarea name="foo">foo%0abar</textarea><input type="submit"></form>并按下提交按钮。(某些浏览器会阻止加载提交的页面,但您可以在控制台中看到URL编码的表单值。)

我不认为你真的需要做太多的决定。如果您只想在换行符上拆分文本,可以这样做:

lines = foo.value.split(/
||
/g);

相关文章