. [] () | 提取属性与调用函数 |
delete new typeof + - | 一元运算符 |
* / % | 乘法、除法、求余 |
+ - | 加法/连结、减 |
>= <= > < | 不等式运算符 |
=== !== | 等式运算符 |
&& | 逻辑与 |
?: | 三元 |
注:在js中,“%”不是一般数学意义上的模运算,而其实是“求余”运算。两个运算数都为正数时,求模运算和求余运算的值相同;两个运算数存在负数时,求模运算和求余运算的值则不相同。git
js包含一种原型链的特性,容许对象继承另外一个对象的属性。正确地使用它能减小初始化时消耗的时间和内存。正则表达式
若是属性名是一个合法的js标识符且不是保留字,则不强制要求用引号括住属性名。编程
反射 --- 检查对象有什么属性数组
只用typeof是不够的,原型链中的任何属性都会返回值,如:bash
typeof flight.toString //fuuction
typeof flight.constructor //function
复制代码
有两种方法能够去处理这些不须要的属性:数据结构
所谓编程,就是将一组需求分解成一组函数与数据结构的技能。闭包
每一个函数在建立时会附加连个隐藏属性:函数的上下文和实现函数行为的代码; 函数在调用时,除了有声明是的形式参数,每一个函数还接收连个附加的参数:this
和 arguments
arguments 不是一个真正的数组,可使用一下方法来转化为真正数组:app
Array.prototype.slice.apply(arguments);
Array.prototype.concat(thisArg, arguments);
复制代码
举例:函数
function.prototype.method = function(name, func){
this.prototype[name] = func;
return this;
}
复制代码
经过给function.prototype
增长一个method
方法,咱们下次给对象增长方法的时候就没必要键入prototype
这几个字符。省去一些麻烦。工具
最后的作法是在函数体的顶部声明函数中可能用到的全部变量。
可使用函数和闭包来构造模块。模块是一个提供接口却隐藏状态与实现的函数或对象。
模块模式的通常形式 是:一个定义了私有变量和函数的函数; 利用闭包建立能够访问私有变量和函数的特权函数; 最后返回这个特权函数,或者把他们保存到一个可访问的地方。模块模式常常结合单例模式(Singleton Pattern)使用。
级联
柯里化
把函数与传递给它的参数相结合, 产生出一个新的函数。
在那些基于类的语言中,继承(inheritance或extends)提供了两个有用的服务。
Function.method('new', function () {
// 建立一个新对象,它继承自构造器函数的原型对象
var that = Object.create(this.prototype);
// 调用构造器函数, 绑定 -this- 到新对象上
var other = this.apply(that, arguments);
// 若是它的返回值不是一个对象, 就返回该新对象
return (typeof other === 'object' && other) || that
})
复制代码
var myObject = maker(f, l, m, c, c);
复制代码
==>
var myObject = maker({
first: f,
middle: m,
last: l,
state: s,
city: c
})
复制代码
经过定制一个新的对象,咱们指明它与所基于的基本对象的区别。
一个函数化构造器的伪代码模块:
var constructor = function (spec, my) {
var that, 其余的私有变量
my = my || {};
把共享的变量和函数添加到my中
that = 一个新对象
添加给that的特权方法
return that;
}
复制代码
typeof [] //onject
var is_array = function (value) {
return Object.prototype.toString.apply(value) === '[object Array]';
}
复制代码
有时候以为注释就像一个时间机器,我用它发送重要的信息给将来的我。
精简的JS --- 主要内容:
在精简JS中,函数是有词法做用域的闭包
对象是无类别的。咱们能够经过普通的赋值给任何对象增长一个新成员的属性。一个对象能够从另外一个对象继承成员属性。
这对建立新的对象和数组来讲是一种很是方便的表示法。JS字面量是数据交换格式JSON的灵感
var isNumber = function isNumber(value){
return typeof value === 'number' && isFinite(value);
}
复制代码
JS的对象永远不会是真的空对象,由于它们能够从原型链中取得成员属性。
本书在豆瓣评分很高,但整本书看下来,说实话,到没感受有特别多的感悟,可能本身学艺不精,还接受不到的大师的深层次的教导。
但收获仍是有的: