从第一次接触 JavaScript 到现在已经有三年的时间了,每次捧读相关的书籍都会温故知新。之前已经总结过一篇ES2015 的文章,这篇文章主要关注 ES2015 之前的规范,记录一下印象不是很深刻的规范和使用方法。
当 JavaScript 解析或运行发生错误时,系统会抛出一个 Error 对象的实例,该实例包含 name、message 和 stack 三个属性,分别表示错误名称、错误提示信息和错误堆栈跟踪信息。
JavaScript 中存在六种原生错误类型:
错误捕获语句:
// 尝试捕获异常
try {
throw new Error('Error is out!');
}
// 捕获异常后执行该分支
catch (e) {
console.log(`${e.name}: ${e.message}`);
console.log(e.stack);
}
// 无论是否存在异常都执行该分支
finally {
console.log('Error is captured!');
}
// 典型应用:读写文件
try {
writeFile(Data);
}
catch(e) {
handleError(e);
}
finally {
closeFile();
}
Object.kyes(obj)
,以数组的形式返回 obj
对象的所有属性 key in obj
,检查 obj
对象中是否存在 key
属性,存在就返回 true
,否则返回 false
for (var key in obj)
,遍历 obj
对象的全部属性,该对象必须 enumberable obj.hasOwnProperty(key)
,判断 key
是否是 obj
对象本身的属性,而不是继承来的属性 位运算是对二进制位的直接计算,在 JavaScript 中进行位运算需要注意的是,由于其使用浮点数保存数值,所以数值执行位运算前会被转换为 32 位带符号的整数,最终的返回值也是一个 32 位的带符号整数,所以这种取整方法不适用超过 32 位带符号整数的最大值 2^31。一共有七种位运算:
|
,或运算 &
,与运算 ~
,否运算 ^
,异或运算 <<
,左移运算,将一个整数的二进制向左移动,尾部补 0,相当于乘二操作 >>
,右移运算,将一个整数的二进制向右移动,正数头部补 0,负数头部补 1,相当于除二操作 >>>
,带符号右移运算,将一个整数的二进制向右移动,正负数头部一律补 0 4 << 1
// => 8
4 >> 1
// => 2
-4 >> 1
// => 2
大部分运算符是左结合的,但赋值运算符和三元运算符则是右结合的:
w = x = y = z;
// 等同于
w = (x = (y = z));
q = a ? b : c ? d : e ? f : g;
// 等同于
q = (a ? b : (c ? d: (e ? f : g)));
JavaScript 原生提供了两个和 Base64 编码相关的方法:
window.atob()
,将 Base64 转换为 ASCII 编码 window.btoa()
,将 ASCII 转换为 Base64 编码 此外,对于要转换为 Base64 的非 ASCII 编码,可以使用 encodeURIComponent()
方法进行预处理:
window.btoa(encodeURIComponent('http://pinggod.com~'));
// => "aHR0cCUzQSUyRiUyRnBpbmdnb2QuY29tfg=="
RFC-2396 将 URI 中的字符分为三类:
一类是保留字符,包括 ;
、 /
、 ?
、 :
、 @
、 &
、 =
、 +
、 $
、 ,
;
一类是 Mark 字符,包括 -
、 _
、 .
、 !
、 ~
、 *
、 '
、 (
、 )
;
一类是基本字符,包括数字和大小写字母。
encodeURI()
和 encodeURIComponent()
的不同之处就在于,前者不会处理保留字符。