你沒有注意到的 js
|| 和 ?? 的比較
主要是差別在 0 和 false 是你想要取得的值的話,就會需要用 ?? 不然用 || 的話,會變成後面的值。
0 || 3; // 3
0 ?? 3; // 0
false || 3; // 3
false ?? 3; // false
至於其它的 null, undefined, 就都沒有差別了
null ?? 3; // 3
null || 3; // 3
undefined ?? 3; // 3
undefined || 3; // 3
For 的世界
for loop 就不寫了
for ... in
用於取得 object 的 key,所以只能對 object 作用
const obj = { a: 1, b: 2, c: 3 };
for (const prop in obj) {
console.log(prop);
}
// output: a, b, c
for ... of
用來取得 array 裡面的值
const obj = [{ a: 1 }, { b: 2 }, { c: 3 }];
for (const prop of obj) {
console.log(prop);
}
// output {a:1}, {b:2}, {c:3}
Object 的世界
entries
可以用 for of 的方式,直接取得 object 的 key 和 value
const object1 = {
a: "somestring",
b: 42,
};
console.log(Object.entries(object1));
for (const [key, value] of Object.entries(object1)) {
console.log(`${key}: ${value}`);
}
// expected output:
// [ ["a", "somestring"], ["b", 42] ]
// "a: somestring"
// "b: 42"
typeof vs instanceof
typeof
typeof 就是用來判斷參數是什麼型別,用法很簡單,就typeof A 。
回傳值基本上就是常見的 js data type:
"number", "string", "boolean", "object", "function", "undefined", "symbol", "bigint"
instanceof
instanceof 是用來判斷 A 是否為 B 的實例,比較的是原型(prototype)。用法:
object instanceof constructor; // object: The object to test.
// constructor:Function to test against
下面來舉個例子說明吧!
function C() {}
function D() {}
var o = new C();
// true, 因為C在o的原型鍊內 ; o.__proto__ === C.prototype
o instanceof C;
// false, 因為 D.prototype 不存在在 o 的原型鍊
o instanceof D; // true 因為object存在於o的原型鍊
// o.__proto__.__proto__ === Object.prototype
o instanceof Object;
Map
Map 物件是簡單的 key-value 配對,物件(Object)和 Map 很相似,但是有以下幾點差別:
- Map 裡面的 key 是唯一的,如果
set到重複的 key,則舊的 value 會被覆蓋。 Map中的keys會根據被添加資料的時間而有順序性,但Object沒有順序性。- Object 的鍵(key)只能是
字串(Strings)或Symbols,而Map的鍵可以是任何值,包含物件、函式或原始型別(primitive type)。