原文地址--javascript的密码花园:http://bonsaiden.github.io/JavaScript-Garden/zh/
1、javascript中所有变量都是对象,除了两个例外:null和undefined。
2、数字也是对象:
2..toString();2 .toString();(2).toString;3、使用点操作符中括号操作符:
var foo = {name:'kitten'};foo.name;foo['name']; var nameAttr = 'name';foo[nameAttr]; foo.1234;//SyntaxErrorfoo['1234'];
删除属性的唯一方法是使用delete操作符;设置属性为null或undefined仅仅是移除了属性和值的关联。
当查找一个对象的属性时,javascript会向上遍历原型链,直到找到给定名称的属性为止。当查找到原型链顶部,也就是Object.prototype时,如果仍没找到则会返回undefined。
当原型属性用来创建原型链时,可以把任何类型的值赋值给它,然而将原子类型赋给prototype的操作会被忽略掉。
一个错误特性被经常使用,那就是扩展 Object.prototype 或者其他内置类型的原型对象。
这种技术被称之为 monkey patching 并且会破坏封装。虽然它被广泛的应用到一些 JavaScript 类库中比如 Prototype, 但是我仍然不认为为内置类型添加一些非标准的函数是个好主意。
扩展内置类型的唯一理由是为了和新的 JavaScript 保持一致,比如 Array.forEach
8、为了判断一个对象是否包含自定义属性而不是原型链上的属性,使用继承自Object.prototype的hasOwnProperty方法。
hasOwnProperty是javascript中唯一一个处理属性但是不查找原型链的函数。
9、如果函数倾向于和 new 关键词一块使用,则我们称这个函数是 构造函数。在函数内部,this 指向新创建的对象。
10、
functionFoo(){}Foo.prototype.method =function(){}; functionBar(){}Bar.prototype =Foo.prototype; newBar().method();
当 method 被调用时,this 将会指向 Bar 的实例对象。
10、闭包是 JavaScript 一个非常重要的特性,这意味着当前作用域总是能够访问外部作用域中的变量。因为 函数 是 JavaScript 中唯一拥有自身作用域的结构,因此闭包的创建依赖于函数。
11、构造函数:
JavaScript 中的构造函数和其它语言中的构造函数是不同的。通过 new 关键字方式调用的函数都被认为是构造函数。
在构造函数内部 - 也就是被调用的函数内 - this 指向新创建的对象 Object。这个新创建的对象的 prototype 被指向到构造函数的 prototype。
如果被调用的函数没有显式的 return 表达式,则隐式的会返回 this 对象 - 也就是新创建的对象。