banner
raye~

Raye's Journey

且趁闲身未老,尽放我、些子疏狂。
medium
tg_channel
twitter
github
email
nintendo switch
playstation
steam_profiles

JavaScript 弱类型比较 ?实现 a == 1 && a == 2 && a == 3 翻譯:JavaScript 弱型別比較?實現 a == 1 && a == 2 && a == 3

這是一篇關於 JavaScript 特性的小短文,計劃有空就會寫寫這種小知識點的文章

在 JavaScript 中,定義一個變數 a,使得:

a == 1 && a == 2 && a == 3 === true

解法 1:重寫 valueOf 方法#

  • 程式碼範例

let value = 0;
const a = {
valueOf: function() {
return ++value;
}
};

console.assert(a==1 && a==2 && a==3, true);

  • 原理

    • a 被用於比較操作(如 a == 1)時,JavaScript 引擎調用 a.valueOf() 來獲取其原始值。
    • 我們重寫 valueOf 方法,使其每次調用時返回遞增的值。
  • 執行結果

    • 第一次比較:a.valueOf() 返回 1,所以 a == 1
    • 第二次比較:a.valueOf() 返回 2,所以 a == 2
    • 第三次比較:a.valueOf() 返回 3,所以 a == 3

解法 2:使用 Proxy 物件#

  • 程式碼範例

let value = 0;
const a = new Proxy({}, {
get: function(target, name) {
return ++value;
}
});

console.assert(a.anyProperty == 1 && a.anyProperty == 2 && a.anyProperty == 3, true);

  • 原理

    • Proxy 物件用於建立一個物件的代理,允許我們攔截和自定義基本操作,如屬性訪問。
    • 我們攔截對 a 的任何屬性的訪問,並在每次訪問時返回遞增的值。
  • 執行結果

    • valueOf 方法類似,每次屬性訪問都會返回遞增的值。
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。