最近在刷廖雪峰的JS教程,把裡面的自己不太清楚的東西在刷一遍。
教程網址:www.liaoxuefeng.com/wiki/001434…
資料型別:
- 簡單型別:
String
、Number
、Boolean
、Null
、Undefined
- 複雜型別:
Object
- ES6新增型別:
Symbol
(感謝TimeTraveler指出)
陣列:
- 修改Array中索引不會有任何錯誤,不建議修改Array大小,並且確保索引不會越界。
物件:
- 物件的屬性名如果不是一個有效的變數,例如
middle-school
,就需要用''括起來。訪問這個屬性也無法使用.操作符,必須用['xxx']
來訪問。(可以利用這個方式獲取部分自動生成屬性值) - 可以利用
in
判斷一個物件的屬性是否存在,當是需要注意,它可能是物件繼承得到的,例如:var xiaoming = { name: '小明', birth: 1990, school: 'No.1 Middle School', height: 1.70, weight: 65, score: null }; 'name' in xiaoming; // true 'grade' in xiaoming; // false 'toString' in xiaoming; // true(由object繼承而來)複製程式碼
- 可以用
hasOwnProperty()
方法來判斷一個屬性是否為物件自身擁有的屬性,例如:var xiaoming = { name: '小明' }; xiaoming.hasOwnProperty('name'); // true xiaoming.hasOwnProperty('toString'); // false複製程式碼
條件判斷:
if...else...
語句的執行特點是二選一,在多個if...else...
語句中,如果某個條件成立,則後續就不再繼續判斷了。- JavaScript把
null
、undefined
、0
、NaN
和空字串''
視為false,其他值一概視為true
。
迴圈:
- for迴圈的一個變體是
for ... in
迴圈,它可以把一個物件的所有屬性依次迴圈出來,需要注意的是,迴圈會把繼承的屬性加上,如果要過濾掉物件繼承的屬性,用hasOwnProperty()
來實現:var o = { name: 'Jack', age: 20, city: 'Beijing' }; for (var key in o) { if (o.hasOwnProperty(key)) { alert(key); // 'name', 'age', 'city' } }複製程式碼
iterable:
- 為了統一集合型別,ES6標準引入了新的
iterable
型別,Array
、Map
和Set
都屬於iterable
型別。 - 具有
iterable
型別的集合可以通過新的for ... of
迴圈來遍歷。(只會迴圈集合本身) - 更好的方式是直接使用
iterable
內建的forEach
方法,它接收一個函式,每次迭代就自動回撥該函式。Array下輸出的為(element, index, array); Map下輸出的為(value, key, map); Set下輸出的為(element, sameElement, set); // Set沒有索引,因此回撥函式的前兩個引數都是元素本身複製程式碼