\n是JavaScript中所有平台的通用换行符序列吗?如果不是,如何确定当前环境的角色?

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

推荐答案

我刚刚测试了几个浏览器,它们使用的是这种愚蠢的JavaScript:

function log_newline(msg, test_value) {
  if (!test_value) { 
    test_value = document.getElementById('test').value;
  }
  console.log(msg + ': ' + (test_value.match(/\r/) ? 'CR' : '')
              + ' ' + (test_value.match(/\n/) ? 'LF' : ''));
}

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

</textarea>

Windows上的IE8和Opera 9使用\r\n.我测试的所有其他浏览器(Windows上的Safari 4和Firefox 3.5,Linux上的Firefox 3.0)都使用\n.在设置值时,它们都可以处理\n,不过IE和Opera会在内部将其再次转换为\r\n.有一篇名为Line endings in Javascript的SitePoint文章提供了更多细节.

还要注意的是,这与HTML文件本身的实际行尾无关(\n\r\n都给出了相同的结果).

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

不过,我觉得你真的不需要做太多决定.如果只想在换行符上拆分文本,可以执行以下操作:

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

Javascript相关问答推荐

为什么我无法使用useMemo()停止脚本渲染?

为什么子组件没有在reaction中渲染?

D3多线图显示1线而不是3线

确定MutationRecord中removedNodes的索引

zoom svg以适应圆

从PWA中的内部存储读取文件

Cookie中未保存会话数据

Angular material 拖放堆叠的牌副,悬停时自动展开&

如何从一个列表中创建一个2列的表?

WebRTC关闭navigator. getUserMedia正确

Mongoose post hook在使用await保存时不返回Postman响应

html + java script!需要帮助来了解为什么我得到(无效的用户名或密码)

从Nextjs中的 Select 项收集值,但当单击以处理时,未发生任何情况

搜索功能不是在分页的每一页上进行搜索

如何访问此数组中的值?

如何根据输入数量正确显示alert ?

构建器模式与参数对象输入

react 路由DOM有条件地呈现元素

Chrome上的印度时区名S有问题吗?

需要刷新以查看Mern堆栈应用程序中的更改