https://github.com/getify/You-Dont-Know-JS

有6个系列。git在线免费。


第一本, up and going (点击链接)

Mission:

作者建议在开始学习时,learn 'just enough' to get by。无需了解语言行为的how and why。

之后,路变的rough,深度学习理解所有的JavaScript。

作者implore reader,学习'The Tough Parts'。

作者challenge you to joureny down the bumpy 'road less traveled'.

当你深挖这个系列,你会真正懂JavaScript。

Summary

JavaScript is awesome. 部分好懂,更多的难懂。

当开发者遭遇困惑,他们通常责备这个语言,实际上是他们理解上的欠缺。

本书会搞定这些难点。


Chapter 3: Into YDKJS

摘要:

  1. Scope & Closures

    • (最基础的内容。Hoisting)
    • (先理解Scope,才能理解Closures)
    • (module pattern需要最优先理解)
  2. this & Object Protoytpes
    • (4个简单rule来理解和决定this的绑定)
    • 和this紧密相关的是Prototypes机制。它在行为上和类完全是对立的。
    • behavior delegation, 行为委托。是Prototypes机制的理解。反类和继承的。
  3. Types & Grammar
    • (type coercion, 类型强制转换,作者认为是非常有用和被低估的工具)
  4. Async & Performance
    • 前3个title是核心机制,Async branch out(偏离核心,扩展范围)
    • Asynchrony不仅是程序执行的关键,它在可写性和可维护性上,作为关键因素上不断的增长。
    • 本章开始:清理概念困惑,如异步,平行,一致性。
    • 然后:异步的主要方法,回调。并阐明它的缺陷。并讲解ES6介绍的2个新机制:
    • promises,  generators
    • Promises: 一个时间独立的包裹器,关于一个未来value。(防止回调地狱)
    • Generators: 一个新的执行JS函数的mode。一个pause-resume能力, 让在生成器中的看着是同步/序列的code,实际上在scenes后面异步的执行。
      • 处理non-linear非线性, non-local-jump 回调的困惑。因此让我们的异步代码看起来是同步的(sync-looing),以便更合理的reason-able。
    • 结论,在异步的世界有效率的编程,,你需要真的去适应把promises和generators联合起来。
  5. ES6 & Beyond
    • JavaScript进化的速度非常快。你需要不断探索。

"You Don't Know JS" isn't a criticism or an insult.

It's a realization that all of us, myself included, must come to terms with.

Learning JavaScript isn't an end goal but a process.

We don't know JavaScript, yet. But we will!


Chapter1: Into Programming

statement声明

a = b * 2;   //2是literal value。字面量值。 ;是semicolon冒号。用在大多数声明后面。

Expressions

Statements由一个/多个expressions组成。

a = b * 2;
  • a是literal expression
  • b是一个变量expression, 意思是:取它的当前值
  • b*2是数学expression, 意思是: 做乘法multiplication
  • a = b*2是一个assignment expression。

一个普遍的表达式也被称为an expression statement。 b * 2

一个更普遍的表达式声明是 a call expression statement(Function)。 alert(a);

练习

小技巧:在浏览器console,多行输入用<shift> + 回车。

经常忘记:

console.log()是console对象使用log()方法。

window.prompt()方法:弹出输入框,输入的值被储存在age中。

age = prompt('Please tell me your age:');
console.log(age);

Object.a a是property属性。

Converting Between Types

coercion:把一个类型转化为另外一个类型。

var a = "42";
var b = Number(a);

implicit coercion含蓄的强制转化。(Chapter2会讲到这个coercion)

//JavaScrip会转化左侧的string为number.
"99.99" == 99.99
true

Code Comments

strive努力写执行正确的代码,也要保证检查时容易读。好的变量/函数名字。

好的评论代码也很重要。

  1. 一定要有评论
  2. 不要每行都有,适量。
  3. 评论的作用是explain why, not what。如果代码比较复杂,需要explain how。

// comments

/*   comments */



Chapter2 Into JavaScript3

对之后5章的概览。少量concepts。

Values & Types

  • string
  • number
  • boolean
  • null and undefined     typeof null返回object这是bug
  • object
  • symbol (new to ES6)    typeof symbo返回的也是字符串。

var  a = '123'

typeof a

的意思是当前在a内的值的类型,“type of the value currently in a”

undefined 未定义的。

  • var  a , 没有赋值,输入a返回的就是undefined.
  • 函数,return no values, 返回的也是undefined
  • 使用void operator也返回undefined
  • statment: 如 var a = '123', 返回的也是undefined。代表没有返回值。return no values。

注意:const声明的是变量,但不能改变type类型。


Objects

Object type 涉及了a compund value。复合值。 property/value, 属性/值对儿。

var obj = {
"hello world": "Thanks",
b: 42,
c: true
}
=> undefined

obj
=>{hello world: "Thanks", b: 42, c: true}

obj["hello world"]
=>"Thanks" 用复合词作为对象的属性,需要加"" ⚠️:
obj["b"] //42,
属性在[]中必须加上冒号,代表他是obj的属性。而不是一个变量。

反面教材:

javascritp文章 You-Dont-Know-JS的更多相关文章

  1. 关于图像文章垂直无缝连接滚动——JS实现

    <!-- 作者:chenyehuacecil@163.com 时间:2015-02-04 描述:实现整篇文章从下到上的无缝连接滚动--><html xmlns="http: ...

  2. 基于Node.js的强大爬虫 能直接发布抓取的文章哦

    基于Node.js的强大爬虫 能直接发布抓取的文章哦 基于Node.js的强大爬虫能直接发布抓取的文章哦!本爬虫源码基于WTFPL协议,感兴趣的小伙伴们可以参考一下 一.环境配置 1)搞一台服务器,什 ...

  3. phpcms文章点击量统计方法

    phpcms用户广大,很好用,很傻瓜.设计思路也很好,对cms的常见功能都有设计,可以作为自己开发的参考. 最近看了下phpcms的源码关于文章点击量统计的这块,自己记录下. 默认文章点击量显示的位置 ...

  4. Node.js Ubuntu下安装

    安装 Node.js 依次执行以下指令: sudo apt-get update sudo apt-get install -y python-software-properties python g ...

  5. io.js的服務器突破

    Node.js与io.js那些事儿 InfoQ中文站 05月20日 14:26 去年12月,多位重量级Node.js开发者不满Joyent对Node.js的管理,自立门户创建了io.js.io.js的 ...

  6. JS原型继承和类式继承

    前言 一个多月前,卤煮读了一篇翻译过来的外国人写的技术博客.此君在博客中将js中的类(构造)继承和原型继承做了一些比较,并且得出了结论:建议诸位在开发是用原型继承.文中提到了各种原型继承的优点,详细的 ...

  7. Morris.js和flot绘制折线图的比较

    [文章摘要] 最近用开源的AdminLTE做框架感觉效果特别好,其针对图表库Morris.js和flot都提供了不错的支持,也都提供了这两者的例子.不过Morris.js是基于Raphael.js来的 ...

  8. C# 用原生JS进行文件的上传

    1.此文章是用原生JS来进行文件的上传,有两个版本,一个不用ajax,一个用ajax. 1)非AJAX <!DOCTYPE html> <html> <head> ...

  9. js无限级树菜单

    以前做网站,树形菜单一般都很简单,自己定义风格样式,简单的js控制,后来原来网上很多文章都在讨论Js树型菜单,看了几个实例,发现这个树比较简单好用. http://hovertree.com/texi ...

随机推荐

  1. MySQL从删库到跑路_高级(六)——索引

    作者:天山老妖S 链接:http://blog.51cto.com/9291927 一.索引简介 1.索引简介 索引(Index)是帮助MySQL高效获取数据的数据结构. 在MySQL中,索引属于存储 ...

  2. suse zypper 添加源

    一.查看源和仓库 1.查看repos (软件仓库) zypper lr 2.查看services(软件源) zypper ls 二.删除源和仓库 1.删除软件仓库 zypper rr name 2.删 ...

  3. Linux基础命令---bc

    bc bc是一种算数语言,其语法和c语言类似,可以交互执行.通过命令行选项可以获得一个标准的数学库.如果请求,在处理任何文件之前定义数学库.BC从处理所有文件的代码开始.命令行中列出的文件按所列顺序排 ...

  4. 学习Linux的正确姿势

    学习Linux的正确姿势 端正学习态度1.Linux不等于骇客(or Cracker).当然众所周知很多“黑客工具”都是Linux平台上的,我帮助过很多Linux小白发现他们殊途同归都是朝着类似Air ...

  5. QImage与QPixmap完全解析

    转载自http://www.civilnet.cn/bbs/browse.php?topicno=4691 用Qt程序在手机上显示一幅图片对编程人员来说是再基础不过的一件事情了.那么先让大家看两段代码 ...

  6. python如何序列化json数据

    使用json模块提供的loads方法和dumps方法,可以很方便的载入和读取json数据格式.而在具体实际应用中,我们使用python数据格式是 string.list 或dict等,这类格式如何直接 ...

  7. 05: api认证

    1.1 api认证原理介绍 1.api认证原理:客户端生成秘钥 1) 客户端与服务器端有一个相同的字符串作为auth_key 2) 客户端使用encryption="auth_key|tim ...

  8. I2C总线信号时序总结【转】

    本文转载自:https://i.cnblogs.com/EditPosts.aspx?opt=1 I2C总线信号时序总结 总线空闲状态  I2C总线总线的SDA和SCL两条信号线同时处于高电平时,规定 ...

  9. U盘+GRUB2引导PE或linux镜像

    利用U盘制作启动盘,引导WinPE.Linux安装的文章多如牛毛,与他们相比本文的特点有: 1.用且仅用grbu2做引导.不使用grub4dos,不是使用msdos mbr转到活动分区,到ntldr, ...

  10. Windows下卸载软件时提示 等待先前的卸载完成? 终止 dllhost.exe 进程

    只要结束进程中的 "dllhost" 进程就好了. 估计原因是, 当卸载某些 "所谓的"较大型的软件的时候, 要去更新, 更改系统对dll链接库的注册, 更新. ...