パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

JavaScriptで「(a ==1 && a== 2 && a==3)」の結果を真にする手法が議論される」記事へのコメント

  • by Anonymous Coward on 2018年01月18日 19時34分 (#3347124)

    だいたい以下のような方法があるようだ(自分がすぐ思いついたのは最初の2つだけだった)
    ・toStringをオーバーライドする
    ・getterを定義する
    ・3つのaの前後に不可視(だけど識別子としては合法)な文字を付けて別の変数にする
    ・valueOfをオーバーライドする
    ・[Symbol.toPrimitive]をオーバーライドする

    ちゃんと考えてないけどProxyでもできそう

    一番すごいと思ったのはこれ
    var a = [1,2,3];
    a.join = a.shift;
    解説すると、
    1. aを数値と比較するために==演算子の作用によってtoStringが呼ばれる。
    2. 配列のtoStringは、デフォルトで配列の文字列表現を得るためにjoinを呼ぶ。
    3. joinがshiftでオーバーライドされているので、先頭から要素が1つずつ取り出されていく。

弘法筆を選ばず、アレゲはキーボードを選ぶ -- アレゲ研究家

処理中...