You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么JavaScript中`<newline>` === `\n`为真但`\r\n` === `\n`为假?

JavaScript模板字面量两种换行行为的核心差异

两者的处理阶段完全不同

  • 第一种:模板字面量中的物理源代码换行,属于JS引擎解析源代码阶段的处理对象。
    这套标准化规则的设计目的是抹平不同操作系统的换行符差异:Windows系统默认用CRLF(\r\n)作为文件换行符,Unix/Linux/macOS默认用LF(\n),旧版macOS曾用CR(\r)。如果没有标准化,同一份JS代码在不同平台保存、运行时,同一个模板字面量会产生完全不同的字符串结果,破坏跨平台一致性。ECMAScript规范明确要求,该阶段所有属于源代码结构的行终止符序列,都会统一被转换为\n。
    因此对应的第一个比较成立:
    `foo
    boo` === `foo\nboo` // true
    
  • 第二种:模板字面量中显式书写的转义换行符(\n/\r/\r\n),属于字符串的语义内容,JS引擎会原样保留不会做任何转换。
    这些转义字符是开发者主动声明要在字符串中包含的控制字符,不属于源代码层面的换行结构,如果引擎擅自修改反而会破坏代码预期:比如你需要开发一个生成Windows格式文本的工具,主动写的\r\n如果被强制转成\n,生成的文件就会不符合格式要求。
    因此另外两个比较结果都是false:\n、\r\n、\r本身就是完全不同的字符/字符序列,原样保留的情况下自然不可能相等:
    `foo\nboo` === `foo\r\nboo` // false
    `foo\nboo` === `foo\rboo` // false
    

内容的提问来源于stack exchange,提问作者Ilya Loskutov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:45:04