parseInt() 的第二個參數
// 建議指定第二個參數
> parseInt("123", 10)
123
> parseInt("010", 10)
10
// 如果不指定,以下的 "010" 將會被改為 8 進位,因為最前方的 0
> parseInt("010")
8
雙等號運算子 ==(等於)會進行型態強制轉換
> "monkey" == "monkey" true > 1 == true true // 避免型態強制轉換,要用三等號運算子 > 1 === true false > true === true true
while 迴圈以及 do-while 迴圈的不同
while (true) {
// 無限迴圈!
}
do {
// 執行至少一次,僅管條件不符合 while(false)
} while (true)
&& 以及 || 運算子「短路邏輯」檢查
// 存取一個物件的屬性前檢查物件是否為空 (null) // 第一 o 不為空才會存取 getName() 屬性 var name = o && o.getName(); // 用來設預設值: // 如果 otherName 為空,name 就會被設為"預設" var name = otherName || "預設";
三元運算子 (tertiary operator)
var allowed = (age > 18) ? "是" : "否";
建立空物件的兩種基本方法
var obj = new Object();
// 以及
var obj = {};
物件屬性的兩種存取方法
obj.name = "小明" var name = obj.name; // 以及 obj["name"] = "小明"; var name = obj["name"];
更有效率的陣列查詢 -> 避免每迴圈一次就會查詢一次 length 屬性
// 正常方式
for (var i = 0; i < arr.length; i++) {
//處理 arr[i]
}
// 避免每迴圈一次就會查詢一次 length 屬性,以下方式較有效率
for (var i = 0, len = arr.length; i < len; i++) {
//處理 arr[i]
}
函式裡的參數 arguments
// 存取一個叫做 arguments 的變數,一個類似陣列的物件,內含所有遞給函式的值
function avg() {
var sum = 0;
for (var i = 0, j = arguments.length; i < j; i++) {
sum += arguments[i];
}
return sum / arguments.length;
}
> avg(2, 3, 4, 5)
3.5
apply() 與 call()
基本上的不同在於傳入參數的方式, call() 是以逗號分開的參數, apply() 是以傳入一個陣列的方式。
fun.apply(thisArg, [argsArray]) fun.call(thisArg, arg1, arg2,...)
巢狀函式
將只有該函式會使用到的函式包括在其中。這樣便能保持全域領域 (global scope) 的函式不會太多。不在全域領界內塞太多函式是件好事情。
function betterExampleNeeded() {
var a = 1;
function oneMoreThanA() {
return a + 1;
}
return oneMoreThanA();
}
Closures(閉包) 避免 memory leak 破壞相互參照(circular reference)的方法
// 將物件 el 直接設為 null
function addHandler() {
var el = document.getElementById('el');
el.onclick = function() {
this.style.backgroundColor = 'red';
}
el = null;
}
// 藉由增加一個新的 closure 來解除 circular reference
function addHandler() {
var clickHandler = function() {
this.style.backgroundColor = 'red';
}
(function() {
var el = document.getElementById('el');
el.onclick = clickHandler;
})();
}
// 直接避開 closure
var el = document.getElementById('el');
el.onclick = clickHandler;
var clickHandler = function() {
this.style.backgroundColor = 'red';
}
整理自:https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/A_re-introduction_to_JavaScript