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

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

  • by Anonymous Coward

    だいたい以下のような方法があるようだ(自分がすぐ思いついたのは最初の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つずつ取り出されていく。

    • by Anonymous Coward

      これを含めてオブジェクトからの暗黙的な型変換利用してるのしかないよね
      もっと変態的なのできないのだろうか

私はプログラマです。1040 formに私の職業としてそう書いています -- Ken Thompson

処理中...