首頁>技術>

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

11
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 「python課程,精心總結」資料型別