0%

008重新認識JS-Day01-筆記3

物件

只要是基礎型別以外的就是物件型別

什麼是物件?

  1. 是個零至多個屬性的集合
  2. 而物件的屬性的值,可以是基礎型別、另一個物件 甚至可以是一個函式

創建物件的方式

在書中有提到兩種創建物件的方式
.用new的方式創物件
.用物件實字方式創物件

Way1. 用new的方式創物件

ex:

1
2
3
4
5
6
let person = new Object(); // 創建一個叫person的物件
person.name = 'Jared';
person.job = 'Back-end engineer';
person.sayName = function(){
alert(this.name);
}

Way2. 用物件實字方式創物件

這種創建方式,同時也是JSON格式的核心語法。

ex:

1
2
3
4
5
6
7
let person = {
name: 'Jared',
job: 'Back-end engineer',
sayName: function(){
alert(this.name);
}
};

物件屬性存取

物件可以透過「.」(點號) 或 [] (中括號) 來存取。
ex:

1
2
3
4
person.name;
person.job;
person["name"]; // 中括號裡面放入屬性名稱的字串
person["sayName"];

透過中括號[]存取屬性的好處

當屬性值是不合法的JavaScript識別字時,就需要用中括號的方式來提取該屬性的值。
ex:

1
2
3
4
5
6
7
let person = {
name: 'Jared',
'001': '你好'
};

console.log(person.001); // 報錯!! Uncaught SyntaxError
console.log(person["001"]); // '你好'

上面這個例子,要特別注意一下,要用這些不合法的JS屬性值來創屬性時,要用字串的方式來創該屬性,
像上面就是用'001': '你好' ,來創立001這個屬性。
接著,提取該屬性值,就要用中括號並將該屬性的字串放在中括號中,就可以提取該屬性的內容囉~
但是,用「.」(點號)來提取屬性值的話,會報錯。

判斷屬性是否存在

當嘗試去存取物件中不存在的屬性時,會回傳undefined
書中有提供以下三種方式
.直接用「.」(點號)來嘗試提取屬性值,若沒有該屬性就回傳undefined
.in 運算子
.hasOwnProperty()方法

另外,in運算子 和 hasOwnProperty的方法差別在會不會順著原形鍊向上查找該屬性是否存在
hasOwnProperty()方法 - 不會順著原形鍊向上查找,只會檢查該物件是否有該屬性
in運算子 - 會順著原形鍊向上查找

陣列

  1. JS中的陣列可以看成一種特別的「物件」,且並沒有規定要放哪種資料類型的元素。
  2. 它跟物件不同的點在於陣列是個有順序的集合。

創建陣列的方式

Way1. 用new的方式創建陣列實體

ex:

1
2
3
4
var a = new Array();
a[0] = "Apple";
a[1] = "Bee";
console.log(a.length); // 2

Way2. 用物件實字的方式創建陣列

ex:

1
2
3
4
var a = [];
a[0] = 'a';
a[1] = 'b';
console.log(a.length); // 2

陣列的length屬性

陣列得長度可以透過length屬性獲得,不過,陣列的length屬性是可以被複寫的喔
像下面的範例,可以透過更動陣列的length的數值,來調整陣列的元素數量。
ex:

1
2
3
4
5
6
var a = ["apple", "boy", "girl"];
console.log(a.length); // 3
a.length = 1;
console.log(a); // ["apple"]
a.length = 3;
console.log(a); // ["apple", "undefined", "undefined"]

陣列的push方法 (有點像c++中的pushback的方法)

push()方法可以直接在陣列的「末端」新增元素
ex:

1
2
3
4
var a = ["a", "b"];
console.log(a); // ["a", "b"]
a.push("c");
console.log(a); // ["a", "b", "c"]

typeof判別各種資料類型

ex:

1
2
3
4
typeof({});  // Object
typeof([]); // Object
typeof(indefined); // undefined
typeof(null); // Object

上面這些例子,有個比較特別的就是對null使用typeof,會回傳Object !!!
在書中有提到這就是JS初始設計上的錯誤,但現在也還沒改,不知道未來會不會XDDD

如何判斷是不是陣列

ex:

1
2
3
Array.isArray([]); // true
Array.isArray(new Array()); // true
Array.isArray({}); // false

JavaScript 運算式(Expression)

JavaScript語法基本上可以分成兩大類「敘述句(Statement)」 與「表達句(Expression)」。

敘述句

就是執行某個動作
像是: 變數的宣告、賦值、迴圈 和 if判斷式 等等都可以歸類於此。
ex:

1
var foo;

表達式

它會產生一個「值」 或 它是任何可以回傳一個值的程式碼
像是: 呼叫函式時的參數
或 透過=(等號)賦值時,在=右邊的部分就是屬於運算式的部分。
ex:

1
var foo = 10*2;  // 在等號的右邊就是一個運算式的展現