神刀安全网

JavaScript

从第一次接触 JavaScript 到现在已经有三年的时间了,每次捧读相关的书籍都会温故知新。之前已经总结过一篇ES2015 的文章,这篇文章主要关注 ES2015 之前的规范,记录一下印象不是很深刻的规范和使用方法。

错误处理

当 JavaScript 解析或运行发生错误时,系统会抛出一个 Error 对象的实例,该实例包含 name、message 和 stack 三个属性,分别表示错误名称、错误提示信息和错误堆栈跟踪信息。

JavaScript 中存在六种原生错误类型:

  • URIError: URI 错误
  • TypeError: 类型错误
  • RangeError: 越界错误
  • SyntaxError: 语法错误
  • ReferenceError: 引用错误
  • EvalError: evel() 执行错误

错误捕获语句:

// 尝试捕获异常
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)));

Base64 编码

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() 的不同之处就在于,前者不会处理保留字符。

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » JavaScript

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址