\r 与 \n 的区别
我们都知道在 Linux 系统中使用 \n
表示下一行行首的位置,而在 Windows 中同样的含义却是使用 \r\n
表示,这是为什么呢?
\r
全称 Carriage Return
,简称 CR
,中文翻译回车
,表示输入指针回到当前行行首(注意这里和我们平时认知中的回车含义不同)
\n
全称 Line Feed
,简称 LF
,中文翻译换行
,表示输入指针换到下一行(不一定是下一行行首)
\r\n
其实就是表示两步操作,先回到行首,再往下移一行,最终的效果就是输入指针到了下一行行首。之所以这么设计,是有历史原因的,早期的打字机是机械式设备,对于可视字符由左向右依次打印,对于控制字符,则相应的做出调整。比如 \r
字符就是把打印指针移到最左侧,\n
字符就是把纸张上移一行(其实也就相当于把打印指针下移一行),而这两个字符放到一起就实现了打印机开始在下一行打印的功能。
后来计算机发展起来了,但早期的存储资源很是稀缺,而使用两个字符表示换到下一行行首有点不划算,所以 Linux 系列的操作系统决定使用 \n
这一个字符来表示这一含义。而 Windows 则保留了传统的做法。
下面有个小例子来描述 \r
的效果:
// 需要在 Terminal 终端中测试,浏览器的 Console 中没有效果
console.log("abc\rcba") // cba
因为 \r
表示回到当前行行首,所以后面的 cba
就覆盖了缓冲区中的 abc
,最终的打印结果也是 cba
。