【小程式】開發 JS知識總結
阿新 • • 發佈:2018-11-01
JS知識總結
- js判斷字元是否為空的方法:
//判斷字元是否為空的方法
function isEmpty(obj){
if(typeof obj == "undefined" || obj == null || obj == ""){
return true;
}else{
return false;
}
}
// 簡寫
if(a != null && a !=' ' && typeof(a) != undefined) <==> if (!! a)
- js 判斷是否相等
始終堅持使用===比較。
要特別注意相等運算子==。JavaScript在設計時,有兩種比較運算子:
第一種是==比較,它會自動轉換資料型別再比較,很多時候,會得到非常詭異的結果;
第二種是===比較,它不會自動轉換資料型別,如果資料型別不一致,返回false,如果一致,再比較。
由於JavaScript這個設計缺陷,不要使用==比較,始終堅持使用===比較。
- 多行字串
由於多行字串用\n寫起來比較費事,所以最新的ES6標準新增了一種多行字串的表示方法,用反引號 ...
表示
`這是一個
多行
字串`;
注意:反引號在鍵盤的ESC下方,數字鍵1的左邊.
- 模板字串
如果有很多變數需要連線,用+號就比較麻煩。ES6新增了一種模板字串,表示方法和上面的多行字串一樣,但是它會自動替換字串中的變數:
var name = '小明';
var age = 20;
var message = `你好, ${name}, 你今年${age}歲了!`;
alert(message);
- if條件判斷
JavaScript把null、undefined、0、NaN和空字串''視為false,其他值一概視為true,因此下面程式碼條件判斷的結果是true。
var s = '123';
if (s.length) { // 條件計算結果為3
//
}
- 變數作用域
由於JavaScript的函式可以巢狀,此時,內部函式可以訪問外部函式定義的變數,反過來則不行; JavaScript的函式在查詢變數時從自身函式定義開始,從“內”向“外”查詢。如果內部函式定義了與外部函式重名的變數,則內部函式的變數將“遮蔽”外部函式的變數。
- 變數提升
JavaScript引擎自動提升了變數y的宣告,但不會提升變數y的賦值。
'use strict';
function foo() {
var x = 'Hello, ' + y;
console.log(x);
var y = 'Bob';
}
foo();
console.log顯示Hello, undefined
- 全域性作用域
不在任何函式內定義的變數就具有全域性作用域。實際上,JavaScript預設有一個全域性物件window,全域性作用域的變數實際上被繫結到window的一個屬性:
'use strict';
var course = 'Learn JavaScript';
alert(course); // 'Learn JavaScript'
alert(window.course); // 'Learn JavaScript'
JavaScript實際上只有一個全域性作用域。任何變數(函式也視為變數),如果沒有在當前函式作用域中找到,就會繼續往上查詢,最後如果在全域性作用域中也沒有找到,則報ReferenceError錯誤。
- 區域性作用域
由於JavaScript的變數作用域實際上是函式內部,我們在for迴圈等語句塊中是無法定義具有區域性作用域的變數的:
'use strict';
function foo() {
for (var i=0; i<100; i++) {
//
}
i += 100; // 仍然可以引用變數i
}
為了解決塊級作用域,ES6引入了新的關鍵字let,用let替代var可以申明一個塊級作用域的變數: