浅谈 js 字符串之神奇的转义
原文:浅谈 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}/ 这样的格式。
也就是说 \ 开头然后 1-3 位 [0-7] 数字格式。
所以 \8 \09 \189 之类的都是无效的,不过也能正常使用,因为 \8 \09 \189 会分别识别成 8, \0 和 9 , \1 和 89

当然 \0 \1 是不可显示字符,所以我们是看不到的,只能通过 length, charCodeAt 或 escape 等其他方法,来确认它的存在。

八进制 的格式是有范围的,它和 十六进制 的范围一样,都是 0-255,只是表达格式不一样而已。
八进制 表示为 \0 - \377,而 十六进制 则是 \x00 - \xff。
只是表现格式不一样,实际值是一样的,都是十进制中的 0-255,说的官方点叫做 Latin-1 (iso-8859-1) 编码。
例如 x 的ASCII码值为 120,八进制为 170 十六进制为 78,所以  "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 都被忽略了。

好了,小知识点分享完毕,如有不对之处,还望跟帖指出,以免误导大家,小生在此先谢过了。

posted on 2014-06-06 22:55 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/3773788.html

浅谈 js 字符串之神奇的转义相关推荐

  1. php字面量,浅谈js之字面量、对象字面量的访问、关键字in的用法

    一:字面量含义 字面量表示如何表达这个值,一般除去表达式,给变量赋值时,等号右边都可以认为是字面量. 字面量分为字符串字面量(string literal ).数组字面量(array literal) ...

  2. 浅谈 js 数字格式类型

    原文:浅谈 js 数字格式类型 很多人也许只知道 123,123.456,0xff 之类的数字格式. 其实 js 格式还有很多数字格式类型,比如 1., .1 这样的,也有 .1e2 这样的. 可能有 ...

  3. PHP字符串转数字面试,浅谈php字符串反转 面试中经常遇到的问题

    下面小编就为大家分享一篇浅谈php字符串反转 面试中经常遇到的问题,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 1.单字节字符串反转 php提供了用于字符串反转的函数strrev( ...

  4. java 字符串转list_浅谈java 字符串,字符数组,list间的转化

    1.关于java.lang.string.split xxx.split()方法可以将一个字符串分割为子字符串,然后将结果作为字符串数组返回. 2.字符串转字符数组 String str =" ...

  5. 浅谈JS中常见的问题(三)

    往期文章目录 浅谈JS中常见的问题(一) 浅谈JS中常见的问题(二) JS知识总结 往期文章目录 前言 11. 同步和异步的区别 12. JS 判断变量类型的几种方法 13. 如何阻止事件冒泡与默认事 ...

  6. 浅谈 js 正则字面量 与 new RegExp 执行效率

    前几天谈了正则匹配 js 字符串的问题:<js 正则学习小记之匹配字符串> 和 <js 正则学习小记之匹配字符串优化篇>. 里面讲到了优化正则起到提升性能的问题,但是能提升多少 ...

  7. 浅谈js原型和原型链

    一.简述 对于javascript 对象(函数) 原型和原型链的理解,其实不那么难,简单来说,需要理解什么是原型,怎么访问原型,什么是原型链,怎么通过原型链去访问原型,就可以大概理清楚原型和原型链的基 ...

  8. 浅谈js执行的AO/VO

    浅谈AO/VO详解 首先说明一下AO和VO的含义 AO:Activive Object,即函数的活动对象. VO:Variable Object,即变量对象. 它们的作用是帮助js引擎在引用变量的时候 ...

  9. js架构设计模式——由项目浅谈JS中MVVM模式

    1.    背景 最近项目原因使用了durandal.js和knockout.js,颇有受益.决定写一个比较浅显的总结. 之前一直在用SpringMVC框架写后台,前台是用JSP+JS+标签库,算是很 ...

  10. 由项目浅谈JS中MVVM模式

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.    背景 最近项目原因使用了durandal.js和knock ...

最新文章

  1. 在Windows上运行Spark程序
  2. python环境搭建_搭建Python编程环境
  3. 轻松搞定日志的可视化(第一部分)
  4. php 查询数据库返回json数据
  5. 比较zImage和uImage的区别
  6. 工作179:接口对接
  7. Docker入门-简介
  8. 发言稿开场白范文_万能演讲开场白范文
  9. 学习Python可以从事哪些工作?
  10. ireport交叉报表 crosstab排序_质性数据分析软件NVivo教程:交叉表查询
  11. Java -- IO
  12. java根据field名获取变量_Java反射有多强?这5大神奇功能,你需要了解!
  13. ThreadStatic特性简介
  14. oracle全库导入 imp,imp导入全数据库
  15. Scala - 快速学习09 - 函数式编程:一些操作
  16. 昌乐博闻学校2021年高考成绩查询,2021高考难度升级吗?两点忠告送给高考生
  17. 求解高维优化问题的改进正弦余弦算法
  18. 国四网络工程笔记(究极错题)
  19. WIn10编译Audacity——C++
  20. Camera成像原理(raw图如何产生的)

热门文章

  1. c语言检测数独是否正确,会数独的大佬请进。这是个判断九宫格数独是否正确的程序。...
  2. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(八):MyBatis分页功能实现
  3. 金蝶K3老单新增自定义菜单按钮
  4. 使用js切割URL的参数
  5. 数据库开发基础-教案-3-认识数据库备份和事务日志备份
  6. 导航 navigationbar 与 tabbar
  7. 多线程下单例设计模式的实现
  8. eclipse中jsp页面%@page import=javax.servlet.http.*%报错
  9. php获取内容中第一张图片地址
  10. mysql 导入,导出数据库