浅谈 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的基础知识,下面的基础知识会充分的帮助你理解闭包.那么接下来先看下变量的作用域. 变量的作用域 变量共有两种,一种为全局变量,一种为局部变量.那么全局变 ...
随机推荐
- Unity3D 表对象分类中的实现(C#)
// Sort by distance in descending order private void SortTargetsByDistance () { targets.Sort(delegat ...
- [LeetCode] Regular Expression Matching [6]
称号: Implement regular expression matching with support for '.' and '*'. '.' Matches any single chara ...
- Webots入门(二)-build up a controller
A simple controller 控制器程序读取传感器的值,然后改动行走速度来避开障碍物. 以下是控制器源码mybot_simple.c: #include<webots/robot.h& ...
- Memcahce(MC)系列(三)Memcached它PHP转让
由PHP转让Memcahce,首先,需要在server安装Memcache,如何安装Memcache这不是本文的重点, 大约memcache安装,谁的朋友有兴趣,请参阅这里:http://blog.c ...
- 【Espruino】NO.03 从点灯开始
http://blog.csdn.net/qwert1213131/article/details/26819773 本文属于个人理解,能力有限,纰漏在所难免,还望指正! [小鱼有点电] 点灯程序应该 ...
- KindEditor参数具体解释
width 编辑器的宽度.能够设置px或%.比textarea输入框样式表宽度优先度高. 数据类型: String 默认值: textarea输入框的宽度 演示样例: K.create('#id', ...
- stringstream转换CString为string出错
使用stringstream转换CString为string时,调试时发现是CString赋给stringstream没有问题,stringstram赋给string就不行,倒也不是没有赋成功,只是赋 ...
- POJ1149 PIGS 【最大流量】
PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16555 Accepted: 7416 Description ...
- DBA查询命令积累——不断更新
原文:DBA查询命令积累--不断更新 一.服务器配置: 1.兼容级别:兼容级别只影响指定数据库中的行为,而不会影响整个服务器上的行为. 1.1.查看数据库兼容级别及更改兼容级别: SELECT com ...
- Scala 专题指南
Scala 专题教程-Case Class和模式匹配 Scala 专题教程-Case Class和模式匹配(1):简单的演示样例 Scala 专题教程-Case Class和模式匹配(2): 模式的种 ...