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 方法

资料:http://www.cnblogs.com/jhxk/articles/1634359.html

三个函数主要区别在于不编码字符的不同:

编程风格

不使用分号的情况

  • 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?