2016年4月27日
[TOC]
2016年4月27日
javascript
字符串
读取注释:
(function () { /*
line 1
line 2
line 3
*/}).toString().split('\n').slice(1, -1).join('\n')
// "line 1 line 2 line 3"转义
反斜杠(\\)在字符串内有特殊含义,用来表示一些特殊字符,所以又称为转义符。
\0 代表没有内容的字符(\u0000)
\b 后退键(\u0008)
\f 换页符(\u000C)
\n 换行符(\u000A)
\r 回车键(\u000D)
\t 制表符(\u0009)
\v 垂直制表符(\u000B)
\' 单引号(\u0027)
\" 双引号(\u0022)
\\ 反斜杠(\u005C)
\XXX 用三个八进制数(000到377)表示字符,XXX对应该字符的Unicode,比如\251表示版权符号。
\xXX 用两个十六进制数(00到FF)表示字符,XX对应该字符的Unicode,比如\xA9表示版权符号。
\uXXXX 用四位十六进制的Unicode编号代表某个字符,比如\u00A9表示版权符号。
字符串内部的单个字符无法改变和增删,这些操作会默默地失败。
length属性返回字符串的长度,该属性也是无法改变的。
字符集
JavaScript使用Unicode字符集,也就是说在JavaScript内部,所有字符都用Unicode表示。
每个字符在JavaScript内部都是以16位(即2个字节)的UTF-16格式储存。也就是说,JavaScript的单位字符长度固定为16位长度,即2个字节。
Base64转码
Base64是一种编码方法,可以将任意字符转成可打印字符。使用这种编码方法,主要不是为了加密,而是为了不出现特殊字符,简化程序的处理。
JavaScript原生提供两个Base64相关方法。
btoa():字符串或二进制值转为Base64编码
atob():Base64编码转为原来的编码
这两个方法不适合非ASCII码的字符,会报错。
要将非ASCII码字符转为Base64编码,必须中间插入一个转码环节,再使用这两个方法。
encodeURIComponent() 函数可把字符串作为 URI 组件进行编码。
escape,encodeURI,encodeURIComponent
escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z
encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z
区别:
传递参数时需要使用encodeURIComponent,这样组合的url才不会被#等特殊字符截断。
进行url跳转时可以整体使用encodeURI
js使用数据时可以使用escape
例如:搜藏中history纪录。
escape对0-255以外的unicode值进行编码时输出%u**格式,其它情况下escape,encodeURI,encodeURIComponent编码结果相同。
解码
unescape 方法
decodeURI 方法
decodeURIComponent 方法
三个函数主要区别在于不编码字符的不同:
编程风格
不使用分号的情况
for和while循环
分支语句:if,switch,try
函数的声明语句
如果本行的结尾或者下一行起首的,是(、[、+、-、/这五个字符中的一个,分号不会被自动添加。
变量声明
为了避免可能出现的问题,最好把变量声明都放在代码块的头部。
new命令
JavaScript使用new命令,从构造函数生成一个新对象。
一旦你忘了加上new,myObject()内部的this关键字就会指向全局对象,导致所有绑定在this上面的变量,都变成全局变量。
相等和严格相等
因为”相等”运算符会自动转换变量类型,造成很多意想不到的情况:
switch…case结构
switch...case结构要求,在每一个case的最后一行必须是break语句,否则会接着运行下一个case。
switch...case不使用大括号,不利于代码形式的统一。
上面的代码建议改写成对象结构。
Last updated
Was this helpful?