banner
raye~

Raye's Journey

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

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が成り立ちます。
    • 2 回目の比較:a.valueOf()2を返すため、a == 2が成り立ちます。
    • 3 回目の比較: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メソッドと同様に、プロパティへのアクセスごとに増加する値が返されます。
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。