无事爱翻书——你不知道的JavaScript 中卷
短评
翻完了中卷,整体评价三星。不是很感兴趣。读这本书的时候缺乏兴趣,看的很局促,很多内容没有仔细阅读。
很多内容,我更倾向于在其他地方阅读,比如 MDN和口水掘金。
结构
本书分为四部分 : 类型types 语法grammar 异步async 和性能performance
类型和语法
typeof
所有 typeof
返回 object
的对象,比如数组,都包含一个内部属性 [[Class]
,这可以视为内部的一个分类,一般通过这种方式获得
Object.prototype.toString.call(new Date())
//"[object Date]"
Object.prototype.toString.call([1])
//"[object Array]"
document.all
falsy(虚值)是在 Boolean 上下文中已认定可转换为‘假‘的值.
document.all
是一个对象,但在在类型转换时候会视为 false
,这个是为了对历史代码的兼容性,很多代码用这个判断是否是 ie
if(document.all){
// ie
alert('ie')
}
|| && 返回值
和直觉可能不一样,||
&&
返回的值不一定是布尔值,而是两个操作数其中一个的值。但并不影响你直觉上的判断结果。
var a =0;
var b ='abc'
var c=null
a||b;
b||c
a&&b
在 C
和php
里会返回true或者false,但在js
python
ruby
里返回的某个操作数的值。
判断会对左边进行条件判断,如果不是布尔值会强制类型转换,然后计算
返回的是什么值?
如果是
||
运算,左边是true就返回左边,如果是false就返回右边如果是
&&
操作,如果是true就返回右边,false返回左边
所以
function a(a,b){
a = a || 'defalut'
b = b || 'd2'
return a+','+b
}
这里会对两边进行 ||
判断,结果是真返回左边,结果否返回右边
小细节
else if并不存在
else if 不是规定的语法,是自己发明的语法
if(){
}else {
if(){}
}
//这里简写成了 else if
异步
异步这里,收获不是很大,说的不感兴趣。
但后续可以整理 promise/A+ 规范
对生成器不感兴趣,哈欠连连,看豆瓣评论很多人也表示需要细细品读,变相承认写的缺乏吸引力
性能
Web Worker
有些处理密集的任务需要执行,希望以多线程的方式执行。
应用场景:
- 密集的数学计算
- 大数据集排序
- 数据处理,压缩,音频分析 图像处理等
- 高流量网络通信
SIMD
单指令多数据,杜宇数据密集型的应用,性能收益明显。不是很详细。
其他的都忽略了
性能调试
写的非常局促,没有展开说。
循环运行多次操作求平均值的做法不正确,推荐使用 benchmark.js
来获取性能结果,也有一个网站可以搜集不同设备上的性能数据 jspref.com
。
性能优化应该关注大局,关键路径应该付出努力优化,费关键路径可以忽略。
结论
怀疑是我菜,还达不到刨根究底的地步,收获不大。