所有变量都是传引用,没有传值的
数字的内部表示都为double,所以1和1.0是相同的值
被当做false的值:null, undefined, ’’, 0, NaN
null,undefined不是对象;布尔,数字,字符串类似对象;其他都是对象,即可变的键值对集合
typeof检测的类型:‘boolean’, ‘number’, ‘string’, ‘undefined’, ’function‘, ‘object’
key:value对中的key是合法标识符时(仅含数字字母下划线)可以不加引号
引用对象属性时可以用
.
或[]
,若属性名不是合法标识符则只能用[]
hasOwnProperty()
查对象属性时不查prototype链,delete
可删除对象属性只有函数会创建作用域,花括号代码块不创建作用域
||
可提供默认值:var middle = stooge["middle-name"] || "(none)"
除了声明时定义的形式参数,函数还接受两个附加的参数:
this
和arguments
。this
值取于四种模式之一:- 当函数作为对象的属性时,this指向该对象
- 当函数不是对象的属性时,this指向全局对象。这设计错误导致内部函数的this指向了全局对象,而不是外部函数的this。解决方法是在外部函数中定义
var that = this;
,然后在内部函数中通过that来访问。 - new Func()创建新对象时,this指向该对象
- func.apply(that, arguments)调用函数时,this指向传进的that
arguments可访问函数被调用时欲传进的实参列表,包括那些没有形参对应的多余参数。arguments类似数组,有length属性可下标访问,但设计错误使它没成为数组。吧arguments变成数组,使用
var args = Array.prototype.slice.apply(arguments)
函数总会返回一个值,没有指定返回值时返回undefined。如果以new Func()形式调用且返回值不是对象,则返回this(该新对象)。
模块:一个定义了私有变量和函数的函数,利用闭包创建可访问私有变量和函数的接口函数,最后返回这个接口函数,或者直接把接口内容存进某个可访问的函数中。
基于prototype继承是基于对象的继承,而不是基于类的继承
继承最好使用函数化模式:
var constructor = function(kv) { 私有实例变量(可通过闭包访问) var that = 要继承的一个新对象 给that添加属性或方法 return that }
数组只是类似数组的对象,它把数组下标转成字符串,用其作为属性。可存放任意类型元素,内部表示不是线性分配的内存。
数组的length等于其最大整数属性名加1,不一定等于数组的元素个数
References
- Javascript秘密花园
- 《Javascript语言精粹》
Promise
- caller调then(callback),callee调resolve(),两者都被调用后callback才会执行
- 多个then()链式调用时,上一个then()的返回值是下一个then()的输入参数
then(callback, errback)
的errback可提供reject()后的错误处理