无事爱翻书——你不知道的JavaScript 中卷

无事爱翻书——你不知道的JavaScript 中卷

短评

翻完了中卷,整体评价三星。不是很感兴趣。读这本书的时候缺乏兴趣,看的很局促,很多内容没有仔细阅读。

很多内容,我更倾向于在其他地方阅读,比如 MDN和口水掘金。


你不知道的JavaScript 中卷

结构

本书分为四部分 : 类型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

Cphp里会返回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

性能优化应该关注大局,关键路径应该付出努力优化,费关键路径可以忽略。

结论

怀疑是我菜,还达不到刨根究底的地步,收获不大。

你可能感兴趣的:(无事爱翻书——你不知道的JavaScript 中卷)