物件
只要是基礎型別以外的就是物件型別
什麼是物件?
- 是個零至多個屬性的集合
- 而物件的屬性的值,可以是基礎型別、另一個物件 甚至可以是一個函式
創建物件的方式
在書中有提到兩種創建物件的方式
.用new的方式創物件
.用物件實字方式創物件
Way1. 用new的方式創物件
ex:
1 | let person = new Object(); // 創建一個叫person的物件 |
Way2. 用物件實字方式創物件
這種創建方式,同時也是JSON格式的核心語法。
ex:
1 | let person = { |
物件屬性存取
物件可以透過「.」(點號) 或 [] (中括號) 來存取。
ex:
1 | person.name; |
透過中括號[]存取屬性的好處
當屬性值是不合法的JavaScript識別字時,就需要用中括號的方式來提取該屬性的值。
ex:
1 | let person = { |
上面這個例子,要特別注意一下,要用這些不合法的JS屬性值來創屬性時,要用字串
的方式來創該屬性,
像上面就是用'001': '你好'
,來創立001這個屬性。
接著,提取該屬性值,就要用中括號並將該屬性的字串放在中括號中,就可以提取該屬性的內容囉~
但是,用「.」(點號)來提取屬性值的話,會報錯。
判斷屬性是否存在
當嘗試去存取物件中不存在的屬性時,會回傳undefined
書中有提供以下三種方式
.直接用「.」(點號)來嘗試提取屬性值,若沒有該屬性就回傳undefined
.in 運算子
.hasOwnProperty()方法
另外,in運算子 和 hasOwnProperty的方法差別在會不會順著原形鍊向上查找該屬性是否存在
hasOwnProperty()方法 - 不會順著原形鍊向上查找,只會檢查該物件是否有該屬性
in運算子 - 會順著原形鍊向上查找
陣列
- JS中的陣列可以看成一種特別的「物件」,且並沒有規定要放哪種資料類型的元素。
- 它跟物件不同的點在於陣列是個有順序的集合。
創建陣列的方式
Way1. 用new的方式創建陣列實體
ex:
1 | var a = new Array(); |
Way2. 用物件實字的方式創建陣列
ex:
1 | var a = []; |
陣列的length屬性
陣列得長度可以透過length屬性獲得,不過,陣列的length屬性是可以被複寫的喔
像下面的範例,可以透過更動陣列的length的數值,來調整陣列的元素數量。
ex:
1 | var a = ["apple", "boy", "girl"]; |
陣列的push方法 (有點像c++中的pushback的方法)
push()方法可以直接在陣列的「末端」新增元素
ex:
1 | var a = ["a", "b"]; |
typeof判別各種資料類型
ex:
1 | typeof({}); // Object |
上面這些例子,有個比較特別的就是對null
使用typeof
,會回傳Object !!!
在書中有提到這就是JS初始設計上的錯誤,但現在也還沒改,不知道未來會不會XDDD
如何判斷是不是陣列
ex:
1 | Array.isArray([]); // true |
JavaScript 運算式(Expression)
JavaScript語法基本上可以分成兩大類「敘述句(Statement)」 與「表達句(Expression)」。
敘述句
就是執行某個動作
像是: 變數的宣告、賦值、迴圈 和 if
判斷式 等等都可以歸類於此。
ex:
1 | var foo; |
表達式
它會產生一個「值」 或 它是任何可以回傳一個值的程式碼
像是: 呼叫函式時的參數
或 透過=(等號)賦值時,在=右邊的部分就是屬於運算式的部分。
ex:
1 | var foo = 10*2; // 在等號的右邊就是一個運算式的展現 |