浅谈 js 字符串之神奇的转义

字符串在js里是非常常用的,但是你真的了解它么?
翻阅《MDN String》就可以了解它的常见用法了,开门见山的就让你了解了字符串是怎么回事。
'string text'
"string text"
"中文 español English हिन्दी العربية português বাংলা русский 日本語 ਪੰਜਾਬੀ 한국어"
可以看到,可以直接使用任意字符。
PS: 如果的你文件编码是GBK或者ANSI的,其他国家语言会显示成?,修改为UTF-8编码后才能正确输入。
而且在下面也提到了转义,不过这里的转义格式不全,只是简单给了个表,而没有全部介绍。
其实js还支持八进制转义,可以在 MDN JavaScript Guide 的 Values, variables, and literals#String literals 一节中找到。
这里明确说了 八进制 转义的格式 \XXX,如果用正则表达式表示的话,大概是 /\\[0-7]{1,3}/ 这样的格式。
也就是说 \ 开头然后 - 位 [0-7] 数字格式。
所以 \8 \09 \189 之类的都是无效的,不过也能正常使用,因为 \8 \09 \189 会分别识别成 , \0 和 , \1 和 
当然 \0 \1 是不可显示字符,所以我们是看不到的,只能通过 length, charCodeAt 或 escape 等其他方法,来确认它的存在。
八进制 的格式是有范围的,它和 十六进制 的范围一样,都是 -,只是表达格式不一样而已。
八进制 表示为 \0 - \377,而 十六进制 则是 \x00 - \xff。
只是表现格式不一样,实际值是一样的,都是十进制中的 -,说的官方点叫做 Latin-1 (iso-8859-1) 编码。
例如 x 的ASCII码值为 ,八进制为 十六进制为 ,所以 "x \170 \x78" === "x x x" 。
现在我们知道了除了 \b \f \n \r \t \v \' \" \\ 转义 和 \xXX 十六进制转义 \uXXXX Unicode编码 外还有 \XXX 八进制转义
其他任何不属于这些转义的字符都会直接输出原字符并且忽略转义符。
如 "\a\8\呵" === "a8呵" 是完全等价的。
当然如果你输入 "\x \u" 则会报错,因为 \x 是 十六进制转义符,后面没有转义数据,所以出错,\u 也是一样。
还有一个不常用的功能,可以利用转义符号 \ 进行字符串折行,或者叫 "heredoc" 之类的效果。
var str = "123\
456";
str === "123456";
他俩完全相等,\ 并没有转义,也没有保留换行,而是连同换行一并去除了。
我们可以测试下:
eval('var s1 = "123\\\r\n456", s2 = "123\\\n456"');
console.log(s1 === "123456");
console.log(s2 === "123456");

可以看,不论是 \n 还是 \r\n 都被忽略了。
好了,小知识点分享完毕,如有不对之处,还望跟帖指出,以免误导大家,小生在此先谢过了。

浅谈 js 字符串之神奇的转义的更多相关文章
- 浅谈 js 字符串 trim 方法之正则篇
原文:浅谈 js 字符串 trim 方法之正则篇 关于 trim 其实没啥好说的,无非就是去除首位空格,对于现代浏览器来说只是简单的正则 /^\s+|\s+$/ 就可以搞定了.而且支持中文空格 等 ...
- 浅谈 js 字符串 search 方法
原文:浅谈 js 字符串 search 方法 这是一个很久以前的事情了,好像是安心兄弟在学习js的时候做的练习.具体记不清了,今天就来简单分析下 search 究竟是什么用的. 从字面意思理解,一个是 ...
- 浅谈 js字符串 trim 方法之正则篇
关于 trim 其实没啥好说的,无非就是去除首位空格,对于现代浏览器来说只是简单的正则 /^\s+|\s+$/ 就可以搞定了.而且支持中文空格 等等.什么 \s 支持 中文空格?是的. 打开 Re ...
- 浅谈JS之AJAX
0x00:什么是Ajax? Ajax是Asynchronous Javascript And Xml 的缩写(异步javascript及xml),Ajax是使用javascript在浏览器后台操作HT ...
- 浅谈 js 正则字面量 与 new RegExp 执行效率
原文:浅谈 js 正则字面量 与 new RegExp 执行效率 前几天谈了正则匹配 js 字符串的问题:<js 正则学习小记之匹配字符串> 和 <js 正则学习小记之匹配字符串优化 ...
- 浅谈 js 正则之 test 方法
原文:浅谈 js 正则之 test 方法 其实我很少用这个,所以之前一直没注意这个问题,自从落叶那厮写了个变态的测试我才去看了下这东西.先来看个东西吧. var re = /\d/; console. ...
- 浅谈JS严格模式
浅谈JS严格模式 简介 何为严格模式?严格模式(strict mode)即在严格的条件下运行,在严格模式下,很多正常情况下不会报错的问题语句,将会报错并阻止运行. 但是,严格模式可以显著提高代码的健壮 ...
- 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂
浅谈JS中的!=.== .!==.===的用法和区别 var num = 1; var str = '1'; var test = 1; test == num //tr ...
- 浅谈JS中的闭包
浅谈JS中的闭包 在介绍闭包之前,我先介绍点JS的基础知识,下面的基础知识会充分的帮助你理解闭包.那么接下来先看下变量的作用域. 变量的作用域 变量共有两种,一种为全局变量,一种为局部变量.那么全局变 ...
随机推荐
- SSL探03
本文探讨了Openssl的Engine机械.Openssl硬件引擎(Engine)可以使用户比較easy地将自己的硬件增加到openssl中去,替换其提供的软件算法. ENGINE 是 OPENSSL ...
- js怎样推断一个对象{}是否为空对象,没有不论什么属性
js怎样推断一个对象{}是否为空对象,没有不论什么属性 前段时间用js写了一个相似"angularjs"用于数据绑定的东西,功能是比較简单了, 通常应该传进来的是一个ArrayLi ...
- 我有DIY一Android遥控-所有开源
我有DIY一Android遥控-所有开源 1.试用 记得宋宝华在「设备驱动开发具体解释」提出一个这种理论「软件和硬件互相渗透对方的领地」,这次证明还是确实是这样,使用上层APP软件加上简单的更为简单的 ...
- Nancy 框架
Nancy 框架 Nancy 框架 1.是一个轻量级用于构建http相应的web框架: 2.与mvc类似,有自己的路由机制: 3.可以处理 DELETE , GET , HEAD , OPTIO ...
- Team Services and Team Foundation Server官方资料入口
Team Foundation Server msdn 中文文档入口 Team Services or Team Foundation Server www.visualstudio.com 英文文档 ...
- 设计模式--简单工厂VS工厂VS抽象工厂
前几天我一直在准备大学毕业生,始终绑起来,如今,终于有时间去学习设计模式.我们研究今天的话题是植物三口之家的设计模式的控制--简单工厂VS工厂VS抽象工厂. 经过细心推敲,我们不难得出:工厂模式是简单 ...
- 实现android里面WebView显示内容
在日常学习.我们会看到,当手机应该检查注册协议.单击协议时,以查看内部协议的全部内容! 以下给大家看看实现的过程: 首先贴show_xy.XML代码: <WebView android:layo ...
- Event Sourcing - ENode(二)
接上篇文章继续 http://www.cnblogs.com/dopeter/p/4899721.html 分布式系统 前篇谈到了我们为何要使用分布式系统,因为ENode本身就是一个分布式的框架.看了 ...
- Task的异步模式
Task的异步模式 返回该系列目录<基于Task的异步模式--全面介绍> 生成方法 编译器生成 在.NET Framework 4.5中,C#编译器实现了TAP.任何标有async关键字的 ...
- dom 规划(html和xml)
html dom与xml dom关联: 什么是 DOM? DOM 是 W3C(万维网联盟)的标准. DOM 定义了訪问 HTML 和 XML 文档的标准: "W3C 文档对象模型 (DOM) ...