布爾值(boolean)判斷數據類型爲空
-
數組
var arr = []; if (arr.length === 0){ alert("arr 爲空"); }
-
對象(python 字典)
var object = {}; # 無法判斷是否爲空 alert(object === {}) // false alert(Boolean(object)) // true
有效方法 1
alert(JSON.stringify(object) === "{}") // true
有效方法 2
var isEmpty = true; for (var i in object){ isEmpty = false; } alert(isEmpty);
有效方法 3 es6 新增
alert(object.keys().length === 0) # true
-
字符串
var str = ''; alert(Boolean(str)); // false var str = '123'; alert(Boolean(str)) // true
箭頭函數
- 箭頭函數在 forEach 或者 map 的函數中,return 不能中斷外部函數的執行
var arr = [1,2,3,4]
arr.forEach(v=>{
if (v=== 2){
return;
}
})
alert("Running"); 此語句仍舊執行
- 這是因爲 return 只中斷了該 箭頭函數的執行,forEach 的參數是一個函數,相當於有兩層執行空間,return 只返回了第一層,也就相當於正常 for 循環中的 continue,等於下面的代碼
var arr = [1,2,3,4];
for (var i=0;i<arr.length;i++){
if (i === 2){
continue
}
}
Promise 對象
- 該對象類似於一個線程,開闢了另一段空間,異步執行代碼後,返回給 訂閱(subscribe)的函數
let Obj = new Promise(re => setTimeout(re, 2000));
Obj.then(()=>{
console.log("Promise Done");
})
console.log("Running");
// 結果是
# Running
# Promise Done
- 該現象會導致,明明在 ngOnInit 中執行了一個 請求數據的Http 請求,然後跟着去獲取該http的數據時,調用報錯,顯示該http 數據爲 Undefined
- 這是因爲在angular 中強制使用 promise 調用 Http 請求,當執行到獲取 http 請求的語句時,正在網絡通信狀態,就跳過該語句,進而執行獲取http 數據的語句,直到http請求完全返回時,http 數據纔會被賦值
- 解決方案就是對 獲取 http 數據加上一個時間緩存,類似於上面的代碼
- 或者 直接在 進行請求Http數據的的語句塊中進行數據操作