JavaScript 高级技巧
0.1. 安全类型检测 javascript内置类型检测并不可靠 safari某些版本(<4)typeof正则表达式返回为function 建议使用Object.prototype.toString.call()方法检测数据类型 function isArray(value){ return Object.prototype.toString.call(value) === "[object Array]"; } function isFunction(value){ return Object.prototype.toString.call(value) === "[object Function]"; } function isRegExp(value){ return Object.prototype.toString.call(value) === "[object RegExp]"; } function isNativeJSON(){ return window.JSON && Object.prototype.toString.call(JSON) === "[object JSON]"; } 对于ie中一COM对象形式实现的任何函数,isFunction都返回false,因为他们并非原生的javascript函数。 在web开发中,能够区分原生与非原生的对象非常重要。只有这样才能确切知道某个对象是否有哪些功能 以上所有的正确性的前提是:Object.prototype.toString没有被修改过 0.2. 作用域安全的构造函数 function Person(name){ this.name = name; } //使用new来创建一个对象 var one = new Person('wdd'); //直接调用构造函数 Person(); 由于this是运行时分配的,如果你使用new来操作,this指向的就是one。如果直接调用构造函数,那么this会指向全局对象window,然后你的代码就会覆盖window的原生name。如果有其他地方使用过window.name, 那么你的函数将会埋下一个深藏的bug。 ==那么,如何才能创建一个作用域安全的构造函数?== 方法1 function Person(name){ if(this instanceof Person){ this.name = name; } else{ return new Person(name); } } 1. 惰性载入函数 假设有一个方法X,在A类浏览器里叫A,在b类浏览器里叫B,有些浏览器并没有这个方法,你想实现一个跨浏览器的方法。 ...