JavaScript: The Good Part
2017-08-06 11:50:09 0 举报
AI智能生成
JavaScript: The Good Part MindMap
作者其他创作
大纲/内容
1. 精华
Good
函数
基于词法作用域的顶级对象
弱类型
动态对象
对象字面量
Bad
基于全局变量的编程模型
2. 语法
空白
没有用的的注释比没有注释更糟糕
标识符
数字、字母、下划线
数字
NaN
IsNaN(number)
Math对象
字符串
.length
语句
代码块不会创建新的作用域
以下值被当作false:
false
null
undefined
空字符串""
数字0
数字NaN
其他值都被当做true
for in
通常需要检测
object.hasOwnProperty(variable)
object.hasOwnProperty(variable)
return 如果没有指定返回值,则为undefined
表达式
typeof
typeof undefined
"undefined"
typeof null
"object"
typeof true(false)
"boolean"
typeof 123
"number"
typeof 'asd'
"string"
typeof funtion
"function"
Any other object
"object"
字面量
对象字面量
属性名
标识符
字符串
数组字面量
正则表达式
函数
3. 对象
对象字面量
检索
|| 运算符可以用来填充默认值
var status = flight.status || 'unknown'
尝试从undefined的成员属性中取值将会导致TypeError异常
可以通过&&运算符来避免错误
flight && flight.equipment
更新
引用
对象通过引用来传递,它们永远不会被复制
原型
检索对象值时,原型链回溯
反射
hasOnwProperty方法
枚举
for in
使用hasOwnProperty方法来排除原型中的属性
删除
delete运算符可以用来删除对象的属性
它不会触及原型链中的任何对象
减少全局变量污染
最小化使用全局变量的方法之一是为你的应用只创建一个唯一的全局变量
使用闭包进行信息隐藏是另一种有效减少全局污染的方法
4. 函数
函数对象
函数字面量
调用
4种调用模式
方法调用模式
对象的一个属性
使用this访问自己所属的对象
通过this能取得所属对象上下文的方法称为public method
函数调用模式
并非一个对象的属性
this绑定到全局对象
设计错误!
定义that并赋值为this
内部函数通过that访问this
构造器调用模式
通过new调用
变量大写
apply调用模式
apply:函数的方法
未传递参数:undefined
参数
arguments数组
返回
未指定返回值,返回undefined
如果调用函数加上new,且返回值不是一个对象,则返回this(该新对象)
异常
一个try语句只会有一个catch语句
扩充类型的功能
给Object.prototype添加方法,可以让该方法对所有对象都可用
这样的方式对函数、数组、字符串、数字、正则表达式和布尔值同样适用
给Function.prototype增加方法来使得该方法对所有函数可用
基本类型的原型是公用结构,所以类库混用时务必小心
一个保险的做法是在判断没有该方法时才添加它
if (!this.prototype[methodName]) {}
递归
JS没有"尾递归优化"
作用域
函数作用域
最好的做法是在函数体的顶部声明函数中可能用到的所有变量
闭包
MDN: A closure is the combination of a function and the lexical environment
within which that function was declared.
within which that function was declared.
一个闭包就是一个函数和这个函数声明时所在的词法环境的组合
闭包就是,在一个函数内的另一个函数,引用了父函数定义的变量,父函数作用域内的变量就会一直保留在内存中,不会清除
只要一个函数内定义另一个函数,就会创建闭包
闭包函数可以访问它被创建时所处的上下文环境
内部函数拥有比它的外部函数更长的生命周期
闭包通常可以用来创建私有变量,模拟OOP
回调
模块
模块模式的一般形式是
一个定义了私有变量和函数的函数,利用闭包创建可以访问私有变量和函数的特权函数,
最后返回一个特权函数,或者把它保存到一个可以访问到的地方
最后返回一个特权函数,或者把它保存到一个可以访问到的地方
级联
一些返回this的方法可以链式调用某个对象的多个方法
柯里化
也常译为"局部套用",是把多参数的函数转换为一系列单参数函数进行调用的技术
柯里化允许我们把函数与传递它的参数相结合,产生出一个新的函数
arguments数组并非一个真正的数组
记忆
对象和数组可以用来缓存计算结果避免重复运算
5. 继承
伪类
对象说明符
原型
函数化
部件
6. 数组
数组字面量
长度
length属性
删除
array.splice(index, count)
枚举
容易混淆的地方
当属性名是小而连续的整数时,使用数组,否则使用对象
方法
指定初始值
7. 正则表达式
借鉴自perl
(^:([A-Za-z]+):)?
^表示字符串的开始
只匹配开头就适配的
(?:......)表示一个非捕获型分组
捕获组后缀?表示这个分组是可选的
(......)表示一个捕获型分组
[......]表示一个字符类
后缀+表示这个字符类会被匹配一次或多次
(\/{0,3})
后缀{0,3}表示/会被匹配0次,或者1~3次
(?::(\d+))?
匹配端口号
\d表示一个数字字符
(?:\/[^?#]*))?
字符类[^?#]表示除?和#之外的所有字符
*表示这个字符类会被匹配0次或多次
处理不严谨,可能会有安全漏洞
(?:\?([^#]*))?
(?:#(.*))?
.会匹配除换行符意外的所有字符
$
表示字符串结束
8. 方法
9. 代码风格
esLint
10. 优美的特性
函数是顶级对象
在精简了的JavaScript中,函数是有词法作用域的闭包(lambda)
基于原型继承的动态对象
对象是无类别的,我们可以通过普通的赋值给任何对象增加一个新成员属性,
一个对象可以从另一个对象继承成员属性。
一个对象可以从另一个对象继承成员属性。
对象字面量和数组字面量
这对创建新的对象和数组来说是一种非常方便的表示法。
JavaScript字面量是数据交换格式JSON的灵感之源。
JavaScript字面量是数据交换格式JSON的灵感之源。
0 条评论
下一页