19 以下代碼執行后,控制臺中的輸出內容為?
var a2 = {}, b2 = Symbol('123'), c2 = Symbol('123');
a2[b2] = 'b';
a2[c2] = 'c';
console.log(a2[b2]);
20 以下代碼執行后,控制臺中的輸出內容為?
var a3 = {},
b3 = { key: "123" },
c3 = { key: "456" };
a3[b3] = "b";
a3[c3] = "c";
console.log(a3[b3]);
21 以下代碼執行后,控制臺中的輸出內容為?
const a = {
i: 1,
toString() {
return a.i++;
},
};
console.log(a == 1 && a == 2 && a == 3);
公粽號【今天也要寫bug】
答案與決議
19
// 答案:b
// 考察 Symbol 型別
// ES6 引入了一種新的基本資料型別:Symbol
// 一個 symbol 值能作為物件屬性的識別符號;這是該資料型別僅有的目的,
// 每個從 Symbol() 回傳的 symbol 值都是唯一的,
var a2 = {},
b2 = Symbol("123"),
c2 = Symbol("123");
// symbol 值唯一,所以 b2 和 c2 作為物件屬性識別符號表示兩個不同的屬性
a2[b2] = "b";
a2[c2] = "c";
console.log(a2[b2]); // 輸出 b
20
// 答案:c
// 考察物件的屬性、隱式強制型別轉換
// 物件的屬性名只能是 string 或 symbol 型別
// 如果物件的屬性名不是這兩者,則會將其隱式強制轉換為 string
// 對于非字串型別轉換為字串型別
// 基本型別:null => 'null', undefined => 'undefined'
// true => 'true', false => 'false', 數字通常直接加引號(極小或極大值采用指數形式加引號)
// 物件轉換為字串型別:如果物件的 valueOf 方法回傳的是基本型別,就按 valueOf 回傳值轉換
// 否則就按物件的 toString 方法的回傳值來進行轉換
var a3 = {},
b3 = { key: "123" },
c3 = { key: "456" };
a3[b3] = "b"; // b3 為普通物件,valueOf 回傳它本身,不是基本型別,所以使用 toString 回傳值來轉換成 string
a3[c3] = "c"; // 同上
// 而普通物件的 toString 方法均回傳 '[object Object]'
// 故經過上述兩次賦值后,a3 為:{ '[object Object]': 'c' }
console.log(a3[b3]); // 最終輸出 c
21
// 答案:true
// 考察強制型別轉換
// == 操作會進行強制型別轉換
// 如果運算元之一是物件,另一個是數字或字串,
// 會嘗試使用物件的valueOf()和toString()方法將物件轉換為原始值,
// 如果 valueOf 回傳基本型別,就按該值進行轉換,否則按 toString 的回傳值轉換
const a = {
i: 1,
toString() {
return a.i++;
},
};
// 對于 a == 1,嘗試將物件 a 轉換為數字型別
// a 為普通物件,它的 valueOf 回傳它本身,所以按 toString 回傳值來轉換
// a.toString() 回傳 1,所以 a == 1 為true
// 然后 a.i 自增為 2
// 同理判斷 a == 2,再一次觸發 toString 方法回傳 2,a == 2 為 true
// 然后 a.i 自增為 3
// 同理 a == 3 為 true
console.log(a == 1 && a == 2 && a == 3); // 最終輸出 true
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/504455.html
標籤:JavaScript
上一篇:用includes方法替代`indexOf != -1`
下一篇:內置物件
