1、首次為變數賦值時務必使用var關鍵字
變數沒有宣告而直接賦值得話,預設會作為一個新的全域性變數,要儘量避免使用全域性變數。
2、使用===取代====和!=運算子會在需要的情況下自動轉換資料型別。但===和!==不會,它們會同時比較值和資料型別,這也使得它們要比==和!=快。
[10] === 10 // is false[10] == 10 // is true'10' == 10 // is true'10' === 10 // is false [] == 0 // is true [] === 0 // is false '' == false // is true but true == "a" is false '' === false // is false
3、underfined、null、0、false、NaN、空字串的邏輯結果均為false4、行尾使用分號實踐中最好還是使用分號,忘了寫也沒事,大部分情況下JavaScript直譯器都會自動新增。對於為何要使用分號,可參考文章JavaScript中關於分號的真相。
5、使用物件構造器function Person(firstName, lastName){ this.firstName = firstName; this.lastName = lastName;}var Saad = new Person("Saad", "Mousliki");
6、小心使用typeof、instanceof和contructor
typeof:JavaScript一元運算子,用於以字串的形式返回變數的原始型別,注意,typeof null也會返回object,大多數的物件型別(陣列Array、時間Date等)也會返回object contructor:內部原型屬性,可以透過程式碼重寫 instanceof:JavaScript運算子,會在原型鏈中的構造器中搜索,找到則返回true,否則返回false
var arr = ["a", "b", "c"];typeof arr; // 返回 "object" arr instanceof Array // truearr.constructor(); //[]
7、使用自呼叫函式函式在建立之後直接自動執行,通常稱之為自呼叫匿名函式(Self-Invoked Anonymous Function)或直接呼叫函式表示式(Immediately Invoked Function Expression )。格式如下:
(function(){ // 置於此處的程式碼將自動執行})(); (function(a,b){ var result = a+b; return result;})(10,20)
8、從陣列中隨機獲取成員
var items = [12, 548 , 'a' , 2 , 5478 , 'foo' , 8852, , 'Doe' , 2145 , 119];var randomItem = items[Math.floor(Math.random() * items.length)];
9、獲取指定範圍內的隨機數
這個功能在生成測試用的假資料時特別有數,比如介與指定範圍內的工資數。
var x = Math.floor(Math.random() * (max - min + 1)) + min;
10、生成從0到指定值的數字陣列
var numbersArray = [] , max = 100;for( var i=1; numbersArray.push(i++) < max;); // numbers = [1,2,3 ... 100]
11、生成隨機的字母數字字串function generateRandomAlphaNum(len) { var rdmString = ""; for( ; rdmString.length < len; rdmString += Math.random().toString(36).substr(2)); return rdmString.substr(0, len);}
12、打亂數字陣列的順序
var numbers = [5, 458 , 120 , -215 , 228 , 400 , 122205, -85411];numbers = numbers.sort(function(){ return Math.random() - 0.5});/* numbers 陣列將類似於 [120, 5, 228, -215, 400, 458, -85411, 122205] */
這裡使用了JavaScript內建的陣列排序函式,更好的辦法是用專門的程式碼來實現(如Fisher-Yates演算法),可以參見StackOverFlow上的這個討論。
13、字串去空格Java、C#和php等語言都實現了專門的字串去空格函式,但JavaScript中是沒有的,可以透過下面的程式碼來為String物件函式一個trim函式:
String.prototype.trim = function(){return this.replace(/^\s+|\s+$/g, "");};
新的JavaScript引擎已經有了trim()的原生實現。
14、陣列之間追加var array1 = [12 , "foo" , {name "Joe"} , -2458];var array2 = ["Doe" , 555 , 100];Array.prototype.push.apply(array1, array2);/* array1 值為 [12 , "foo" , {name "Joe"} , -2458 , "Doe" , 555 , 100] */
15、物件轉換為陣列
var argArray = Array.prototype.slice.call(arguments);
16、驗證是否是數字
function isNumber(n){ return !isNaN(parseFloat(n)) && isFinite(n);}
17、 驗證是否是陣列
function isArray(obj){ return Object.prototype.toString.call(obj) === '[object Array]' ;}
但如果toString()方法被重寫過得話,就行不通了。也可以使用下面的方法:
Array.isArray(obj); // its a new Array method
如果在瀏覽器中沒有使用frame,還可以用instanceof,但如果上下文太複雜,也有可能出錯。
var myFrame = document.createElement('iframe');document.body.appendChild(myFrame);var myArray = window.frames[window.frames.length-1].Array;var arr = new myArray(a,b,10); // [a,b,10] // myArray 的構造器已經丟失,instanceof 的結果將不正常// 構造器是不能跨 frame 共享的arr instanceof Array; // false
18、獲取陣列中的最大值和最小值
var numbers = [5, 458 , 120 , -215 , 228 , 400 , 122205, -85411]; var maxInNumbers = Math.max.apply(Math, numbers); var minInNumbers = Math.min.apply(Math, numbers);
19、清空陣列var myArray = [12 , 222 , 1000 ]; myArray.length = 0; // myArray will
20、使用length屬性截斷陣列
前面的例子中用length屬性清空陣列,同樣還可用它來截斷陣列:
var myArray = [12 , 222 , 1000 , 124 , 98 , 10 ]; myArray.length = 4; // myArray will be equal to [12 , 222 , 1000 , 124].
與此同時,如果把length屬性變大,陣列的長度值變會增加,會使用undefined來作為新的元素填充。length是一個可寫的屬性。
myArray.length = 10; // the new array length is 10 myArray[myArray.length - 1] ; // undefined