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
stringnumberbooleannullandundefined typeof null返回object这是bugobjectsymbol(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 ...
随机推荐
- Intro to Python for Data Science Learning 6 - NumPy
NumPy From:https://campus.datacamp.com/courses/intro-to-python-for-data-science/chapter-4-numpy?ex=1 ...
- [转] Matlab编程规范(MATLAB Programming Style Guidelines)
转自: Jerry Zitao Liu的博客 主要是参考了下面这篇文章,简洁总结在这里. MATLAB Programming Style Guidelines 简洁总结如下: 表示object的数量 ...
- PowerDesigner逆向操作(从mysql5.0生成数据库的物理模型),把Comment写到name中,pdm文件导出为word
PowerDesigner逆向操作(从mysql5.0生成数据库的物理模型) 环境:powderdesigner12.5:mysql5.0步骤:1. 为指定的数据库配置mysql的ODBC数据源先下载 ...
- MySQL Crash Course #08# Chapter 16. Using Different Join Types
记文档还是相当重要的! 索引 假名的三个用途 自交(Self Joins) 自然交(Natural Joins) Outer Joins Using Table Aliases Using alias ...
- POJO/VO/DTO等对象模型
JavaBean 要想成为JavaBean,需要满足以下条件: 1,提供一个默认的无参构造函数. 2,需要被序列化并且实现了Serializable接口. 3,可能有一系列可读写属性伴随"g ...
- c++中的字符集与中文
就非西欧字符而言,比如中国以及港澳台,在任何编程语言的开发中都不得不考虑字符集及其表示.在c++中,对于超过1个字节的字符,有两种方式可以表示: 1.多字节表示法:通常用于存储(空间效率考虑). 2. ...
- HDU 1247 Hat’s Words(字典树)题解
题意:给一个字符串集,要你给出n个字符串s,使s能被所给字符串集中的两个相加所得(ahat=a+hat) 思路:简单字典树题,注意查询的时候要判断所指next是否为NULL,否则会RE非法访问. 代价 ...
- BZOJ1966: [Ahoi2005]VIRUS 病毒检测 Trie+搜索
Description 科学家们在Samuel星球上的探险仍在继续.非常幸运的,在Samuel星球的南极附近,探险机器人发现了一个巨大的冰湖!机器人在这个冰湖中搜集到了许多RNA片段运回了实验基地.科 ...
- 接口中带参方法,传入IB类型的数据
不同的接口有不同的方法 不同的类有不同的作用 不同的作用产生不一样的效果 不同的效果让程序看似复杂,实际简单... 比如此程序,看似复杂,实际就那么点事: 谁生成了谁,谁设置了谁,谁传入了谁,谁被谁调 ...
- FAST:通过Floodlight控制器下发流表
参考: Floodlight+Mininet搭建OpenFlow(四):流表操作 通过Floodlight控制器下发流表 下发流表的方式有两种: 1.借助Floodlight的北向API,利用curl ...