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 ...
随机推荐
- Python: os.listdir()
os.listdir(): 返回一个列表,此列表包含参数路径下的的文件名或文件夹名.这个列表以字母为顺序. eg: >>>import os >>>dirs=os. ...
- js 操作数字类型
1.内置函数 Number().parseInt().parseFloat() var num = "88.88abc888"; Number(num); ...
- web前端----JavaScript的DOM(三)
一.JS中for循环遍历测试 for循环遍历有两种 第一种:是有条件的那种,例如 for(var i = 0;i<ele.length;i++){} 第二种:for (var i in l ...
- Cannot find JRE '1.8'
- 计算概论(A)/基础编程练习1(8题)/8:与7无关的数
#include<stdio.h> int main() { ; // n < 100 scanf("%d", &n); // 循环遍历判断 再进行平方和 ...
- 06: Pymysql
1.1 Pymysql安装与简介 1.安装 pip3 install pymysql 2.介绍(支持python3) 1. pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...
- 20162311 编写Android程序测试查找排序算法
20162311 编写Android程序测试查找排序算法 一.设置图形界面 因为是测试查找和排序算法,所以先要有一个目标数组.为了得到一个目标数组,我设置一个EditText和一个Button来添加数 ...
- UVa 1471 Defense Lines - 线段树 - 离散化
题意是说给一个序列,删掉其中一段连续的子序列(貌似可以为空),使得新的序列中最长的连续递增子序列最长. 网上似乎最多的做法是二分查找优化,然而不会,只会值域线段树和离散化... 先预处理出所有的点所能 ...
- 打印图形|2014年蓝桥杯B组题解析第五题-fishers
打印图形 小明在X星球的城堡中发现了如下图形和文字: rank=3 rank=5 rank = 6 小明开动脑筋,编写了如下的程序,实现该图形的打印. 答案:f(a, rank-1, row, col ...
- java数字格式化
[转载] Java 提供 DecimalFormat 类,帮你用最快的速度将数字格式化为你需要的样子.下面是一个例子: importjava.text.DecimalFormat; publiccla ...