1.用for-in遍曆對象時(for-in最好不要用來遍曆數組,遍曆數組一般用for-each)最好要過濾掉對象的原型鏈的幹擾
if(Object.prototype.clone === 'undefined'){Object.prototype.clone = function(){}}for(var key in MyObject){if(MyObject.hasOwnProperty(key)){//代表是有原型鏈的,原型鏈中的有一些對象或者屬性可能會與我們正在遍曆的對象的屬性發生衝突,故而應該過濾掉原型鏈。}}
2.要增加原型的屬性(方法)需要使用諸如這樣的方式:Object.prototype.屬性/方法 = .../function(){}。
3.隱式全域變數與顯式全域變數:隱式全域變數是在函數(funtion)裡面聲明的全域變數;顯式全域變數則不是在函數裡面聲明的全域變數。
3.代碼中避免隱式類型轉換:當判斷"false == 0"時返回的是true,這種情況是不符合邏輯的,這時候只好使用"false === 0"來避免這種類型隱式地被轉換了。
4.千萬不要使用eval():此函數可以將任意一個字串當做一個javascript程式碼片段來執行,當需要討論的代碼是預先編寫好了的,是沒有理由使用eval()的。
如果代碼是運行時動態產生的,也有其他的方法來實現相應的功能。
例子:var a = eval('1234+567');//結果是1810var b = '1234+567';//結果是1234+567alert(a);
5.parseInt():此方法會解析一個字串並返回其中的數值,當字串是"09"這種類型時,使用parseInt('09')返回的就是0,因為0開始的字串會被當做八進位來解析。
在這種情況下我們就需要使用另一個參數來約束這個方法,像這樣parseInt('09',10)就表明在解析這個字串的時候是以十進位來解析的,返回的結果就是9;
當然如果字串中全部是數值的話還可以使用Number('09')這種方法來擷取到9這個結果,但是像"009 Hello"的字串如果使用Number()方法來轉換時返回的結果就是NaN,此時最好
還是用parseInt()方法。
6.javascript中的“對象字面量”:
var Person = function(name){this.name = name,this.say = function(){return 'I am '+this.name;} }
當我們使用new 使用這個建構函式時,其內部實際上是發生了一下的情況:
var Person = function(){ //建立了一個“空”對象,此對象的引用指向了Person 這個對象 var this = {}; //想this這個“空”對象添加屬性和方法 this.name = name, this.say = function(){ return 'I am '+this.name; } }
其實,上面所說的this對象是一個Null 物件其實是不準確的,因為this還繼承了Person 的原型中的所有成員,因此,更像是下面的語句:
this = Object.create(Person.prototype)
而且在建構函式中我們可以返回任意一個參數,只要這個參數是一個對象就行了
7.在javascript中可重用的方法都應該放置到最先的原型中。