对象
- 注释一定要精确的描述代码,没有用的注释比没有注释更糟糕
- 值NaN是一个数值,它表示一个不能产生正常结果的运算结果。NaN不等于任何值,包括它自己,你可以用函数
isNaN(number)检测NaN - Math对象
- 下面列出的值被当作假:
false,null,undefined,空字符串,数字0,数字NaN - 通常你需通过检测
object.hasOwnProperty(variable)来确定这个属性名就是该对象的成员 - JavaScript的简单类型包括
数字、字符串、布尔值,null值和undefined, 基本类型是不可变的。其他都是对象。JavaScript中的对象是可变的键控集合,在javascript中,数组是对象,函数是对象,正则表达式是对象,对象也是对象。。对象时属性的容器,其中每个属性都拥有名字和值。属性的名字可以是包括空字符串的在内的任意字符串。属性值可以是除undefined值之外的任何值。 - javascript中的对象是无类别的,他对新属性的名字和值没有约束。对象适合用于收集和管理数据。对象可以包含其他对象,所以它们可以容易地表示成树形或图形结构,javascript包括一个原型链特性,允许对象继承另一个对象的属性。正确地使用它能减少对象初始化的时间和内存消耗。
- 对象通过引用来传递。它们永远不会被拷贝。
- 反射:使用hasOwnProperty方法,如果对象拥有独有的属性,他将返回true,hasOwnProperty方法不会检查原型链
- 枚举:for in语句可用来遍历一个对象的所有属性名。该枚举过程将会列出所有的属性,包括函数和你可能不关心的原型中的属性--所以有必要过滤掉那些你不想要的值,最为常用的过滤器是hasOwnProperty方法,以及使用typeof来排除函数,属性名出现的顺序是不确定的,通过使用for而不是for in,可以得到我们想要的属性,而不用担心可能发掘出原型链中的属性,并且我们按正确的顺序取得了他们的值
- delete运算符可以用来删除对象的属性,不会触及原型链中的任何对象。
- 减少全局变量污染
- 最小化使用全局变量的一个方法是在你的应用走只创建唯一一个全局变量,该变量此时变成了你的应用的容器,
- 闭包
函数
- 函数对象:函数就是对象。对象是“名/值”对的集合并拥有一个连到原型对象的隐藏链接。对象字面两产生饿对象链接到
Object.prototype。函数对象链接到Function.prototype(该原型对象本上链接到Object.prototype)。每个函数在创建时,富有两个隐藏属性:函数上下文和实现函数行为的代码 - 每个函数对象在创建时也随带有一个prototype属性。它的值是一个拥有
constructor属性且值即为该函数的对象。这和隐藏链接到Function.prototype完全不同。 - 因为函数是对象,所以它们可以像任何其他的值一样被使用。函数可以存放在变量,对象和数组。函数可以被当作参数传递给其他函数,函数也可以返回函数,并且,因为函数是对象,所以函数可以拥有方法。函数的与众不同之处在于他们可以被调用。
- 调用:调用一个函数将暂停当前函数的执行,传递控制权和参数给新函数。除了声明时定义的形式参数,每个函数接受两个附加的参数:
this和arguments。
Object.prototype添加方法来使得该方法对所有对象可用
Function.prototype.method = function(name,func){
if(!this.prototype[name]){
this.prototype[name] = func
}
}
对函数,数组,字符串,数字,正则表达式和布尔值同样适用。
- 递归
- 作用域:js有函数作用域,定义在函数中的参数和变量在函数外部是不可见的。而且在一个函数中的任何位置定义的变量在该函数中的任何地方都可见。
- 闭包:内部函数可以访问它被创建时所处的上下文环境。
- 回调
- 模块:我们可以使用函数和闭包来构造模块。模块是一个提供接口却隐藏状态与实现函数或对象。通过使用函数去产生模块,我们几乎可以完全摒弃全局变量的使用。模块模式的一般形式是:一个定义了私有变量和函数的函数;利用闭包创建可以访问私有变量和函数的特权函数;最后返回这个特权函数,或者把它们保存到一个可访问到的地方
String.method('deentityify',function () {
var entity = {
quot: '"',
lt: '<',
gt: '>'
};
//返回deentityify方法
return function () {
return this.replace(/&([^&;]+);/g,
function (a,b) {
var r = entity[b];
return typeof r === 'string' ? r :a
}
)
}
}())