javascritp文章 You-Dont-Know-JS
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
摘要:
- Scope & Closures
- (最基础的内容。Hoisting)
- (先理解Scope,才能理解Closures)
- (module pattern需要最优先理解)
- this & Object Protoytpes
- (4个简单rule来理解和决定this的绑定)
- 和this紧密相关的是Prototypes机制。它在行为上和类完全是对立的。
- behavior delegation, 行为委托。是Prototypes机制的理解。反类和继承的。
- Types & Grammar
- (type coercion, 类型强制转换,作者认为是非常有用和被低估的工具)
- 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联合起来。
- 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努力写执行正确的代码,也要保证检查时容易读。好的变量/函数名字。
好的评论代码也很重要。
- 一定要有评论
- 不要每行都有,适量。
- 评论的作用是explain why, not what。如果代码比较复杂,需要explain how。
// comments
/* comments */
Chapter2 Into JavaScript3
对之后5章的概览。少量concepts。
Values & Types
string
number
boolean
null
andundefined 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的更多相关文章
- 关于图像文章垂直无缝连接滚动——JS实现
<!-- 作者:chenyehuacecil@163.com 时间:2015-02-04 描述:实现整篇文章从下到上的无缝连接滚动--><html xmlns="http: ...
- 基于Node.js的强大爬虫 能直接发布抓取的文章哦
基于Node.js的强大爬虫 能直接发布抓取的文章哦 基于Node.js的强大爬虫能直接发布抓取的文章哦!本爬虫源码基于WTFPL协议,感兴趣的小伙伴们可以参考一下 一.环境配置 1)搞一台服务器,什 ...
- phpcms文章点击量统计方法
phpcms用户广大,很好用,很傻瓜.设计思路也很好,对cms的常见功能都有设计,可以作为自己开发的参考. 最近看了下phpcms的源码关于文章点击量统计的这块,自己记录下. 默认文章点击量显示的位置 ...
- Node.js Ubuntu下安装
安装 Node.js 依次执行以下指令: sudo apt-get update sudo apt-get install -y python-software-properties python g ...
- io.js的服務器突破
Node.js与io.js那些事儿 InfoQ中文站 05月20日 14:26 去年12月,多位重量级Node.js开发者不满Joyent对Node.js的管理,自立门户创建了io.js.io.js的 ...
- JS原型继承和类式继承
前言 一个多月前,卤煮读了一篇翻译过来的外国人写的技术博客.此君在博客中将js中的类(构造)继承和原型继承做了一些比较,并且得出了结论:建议诸位在开发是用原型继承.文中提到了各种原型继承的优点,详细的 ...
- Morris.js和flot绘制折线图的比较
[文章摘要] 最近用开源的AdminLTE做框架感觉效果特别好,其针对图表库Morris.js和flot都提供了不错的支持,也都提供了这两者的例子.不过Morris.js是基于Raphael.js来的 ...
- C# 用原生JS进行文件的上传
1.此文章是用原生JS来进行文件的上传,有两个版本,一个不用ajax,一个用ajax. 1)非AJAX <!DOCTYPE html> <html> <head> ...
- js无限级树菜单
以前做网站,树形菜单一般都很简单,自己定义风格样式,简单的js控制,后来原来网上很多文章都在讨论Js树型菜单,看了几个实例,发现这个树比较简单好用. http://hovertree.com/texi ...
随机推荐
- linux常用命令:/etc/group文件详解
Linux /etc/group文件与/etc/passwd和/etc/shadow文件都是有关于系统管理员对用户和 用户组管理时相关的文件.linux /etc/group文件是有关于系统管理员对用 ...
- Linux基础命令---diffstat
diffstat 这个程序读取diff的输出,并显示每个文件的插入.删除和修改的直方图.Diffstat是一个用于检查大型复杂修补程序文件的程序.它从包含diff输出的一个或多个输入文件中读取,生成针 ...
- QPropertyAnimation 几行代码快速制作流畅的动画效果
QPropertyAnimation Class 官方英文文档[点击前往] QPropertyAnimation Class 中文译文文档[点击前往] 简介 QPropertyAnimation ...
- linux查看内存free
free 加参数-b/k//m/g,以b.k.m.g的大小显示结果,默认以k显示 [root@oldboy ~]# free total used free shared buffers cached ...
- P4180 【模板】严格次小生成树[BJWC2010]
P4180 [模板]严格次小生成树[BJWC2010] 倍增(LCA)+最小生成树 施工队挖断学校光缆导致断网1天(大雾) 考虑直接枚举不在最小生成树上的边.但是边权可能与最小生成树上的边相等,这样删 ...
- Python3 Selenium定位不到元素常见原因及解决办法
Python3 Selenium定位不到元素常见原因及解决办法 一.问题描述 在做web应用的自动化测试时,定位元素是必不可少的,这个过程经常会碰到定位不到元素的情况: 报错信息: no such e ...
- 20145333茹翔 Exp5 MSF基础应用
20145333茹翔 Exp5 MSF基础应用 实验内容 掌握metasploit的基本应用方式,掌握常用的三种攻击方式的思路. 一个主动攻击,如ms08_067; 一个针对浏览器的攻击,如ms11_ ...
- Linux slab分配器【转】
本文转载自:https://www.ibm.com/developerworks/cn/linux/l-linux-slab-allocator/ 良好的操作系统性能部分依赖于操作系统有效管理资源的能 ...
- 深入理解JavaScript的变量作用域
在学习JavaScript的变量作用域之前,我们应当明确几点: JavaScript的变量作用域是基于其特有的作用域链的. JavaScript没有块级作用域. 函数中声明的变量在整个函数中都有定义. ...
- 支持github的chrome插件octotree
1.这款插件有何作用? 方便浏览github上的源码 2.安装方法 通过以下链接进行安装: https://chrome.google.com/webstore