浅谈 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的基础知识,下面的基础知识会充分的帮助你理解闭包.那么接下来先看下变量的作用域. 变量的作用域 变量共有两种,一种为全局变量,一种为局部变量.那么全局变 ...
随机推荐
- Palindromes _easy version
Time Limit: 1Sec MemoryLimit: 64 MB Submit:165 Solved: 76 [Submit][Status][WebBoard] Description & ...
- UVA - 11637 Garbage Remembering Exam (组合+可能性)
Little Tim is now a graduate,and is thinking about higher studies. However, he first needs to appear ...
- Android Tween Animation
View Animation, 它显示在view向上Tween Animation Tween动画.本质上没有变化View对象本身.只要改变它绘制 实施方式有两种.一个xml定义,直接在代码中的定义 ...
- PHP于DIRECTORY_SEPARATOR任务
DIRECTORY_SEPARATOR是php的内部常量.用于显示系统分隔符的命令,不须要不论什么定义与包括就可以直接使用. 在windows下路径分隔符是\(当然/在部分系统上也是能够正常执行的), ...
- List subList()的一个demo
只要保证toIndex不大于size并且fromIndex不大于toIndex即可(谁会传一个负数的下标呢?) public List<E> subList(int fromIndex, ...
- oracle record is locked by another user
这个问题的根源先说说:午后更改数据库表,保存更改后,却没有提交完整.突然,去什么地方调试,拔掉网线,然后插上网线,这个出现record is locked by another user错误.网上找原 ...
- 正则、grep、sed、awk
每次用到正则都要蛋疼一下,索性总结一下在这里. 正则 正則表達式主要分为基础正则和扩展正则.注意,正则和一般命令行输入的命令的通配符不同.正则仅仅使用于支持这样的表示法的工具,如:vi,grep,se ...
- Windows store 验证你的 URL http:// 和 https:// ms-appx:/// ms-appdata:///local
前缀 使用 注意事项 http:// 和 https:// 联机存储的图像 这些图像可能缓存在本地,因此图像服务器可能未收到图像的请求.可以在这些 URL 中附加查询字符串.确保 Web 服务器返回原 ...
- SQL Server 2008 R2 性能计数器详细列表(三)
原文:SQL Server 2008 R2 性能计数器详细列表(三) SQL Server,Deprecated Features 对象: 监视指定为不推荐使用的功能: SQL Server Depr ...
- BCP导出导入
BCP导出导入大容量数据实践 前言 SQL SERVER提供多种不同的数据导出导入的工具,也可以编写SQL脚本,使用存储过程,生成所需的数据文件,甚至可以生成包含SQL语句和数据的脚本文件.各有优 ...