ホームページ >ウェブフロントエンド >jsチュートリアル >面接の質問: 「a==1&&a==2&&a==3」を true にするにはどうすればよいですか?

面接の質問: 「a==1&&a==2&&a==3」を true にするにはどうすればよいですか?

青灯夜游
青灯夜游転載
2023-03-13 20:06:481634ブラウズ

この記事では、「a==1&&a==2&&a==3」を true にする方法を確認するための典型的な面接の質問を紹介します。このインタビューの質問を通じて、そこに含まれる知識のポイントを学びました。ぜひ皆さんのお役に立てれば幸いです。

面接の質問: 「a==1&&a==2&&a==3」を true にするにはどうすればよいですか?

1. 問題分析

if (a == 1 && a == 2 && a == 3) {
  console.log('Win')
}

コードを実行してコンソールに正常に出力する方法勝利 ?

最初に質問を見たとき、私は目がくらんでしまいました。どうしてこのような矛盾した状況が起こるのでしょうか?それは、人がどのようにして子供でありながら同時に大人になることができるのかに相当します。または

面接の質問: 「a==1&&a==2&&a==3」を true にするにはどうすればよいですか?

#落ち着いて、手がかりを見つけてください。

a が同時に 1 2 3 に等しいとは言えません。

そして、js は単一のスレッドで実行されます。たとえ一行で書かれていても、左から右へ実行されるため、同じ時間・空間ではありません。

同じ時代ではないので、当然、人は子供になり、次に大人になり、そして老人になることができます。

面接の質問: 「a==1&&a==2&&a==3」を true にするにはどうすればよいですか?

質問に戻ります。この条件を true にしたい場合は、 a を 1 回取得し、同時に 1 ずつ増加させる必要があります。

2. 解決策

2.1 toString

最初の方法は、[判定プロセスでの暗黙的な変換]# を使用することです。 ##toString メソッド。他の記事 なぜ [] == ![] は true になるのですか? で詳しく説明しました。

const a = {
  _a: 0,
  toString: function() {
    return ++a._a
  }
}

一度実行し、_a に 1 を追加してから戻ります。

toString は

Object.prototype 上のデフォルトのメソッドであるため、このメソッドは変更するのと同じです。通常の暗黙的な変換の toString メソッドがインターセプトされます。

プロトタイプとプロトタイプ チェーンに関する知識ポイント

問題は解決できます。

コメント欄の何人かの友人は、a = true を設定することでも問題を解決できると言いました。確かに非常に誤解を招きます。実際、暗黙的な変換の優先順位が混乱します。簡単に言えば、暗黙的変換は 2 つの部分で構成されます:

変換ルールと変換をトリガーする条件ifパッケージ全体が Boolean()== の変換ルールをトリガーし、文字列が右側の toString()## をトリガーします #変換ルール。 この質問に戻りますが、

==

の右側は数値であり、JS の実行行は左から右です。したがって、このときにトリガーされるのは、Number() ルールです。左側の true1 に変換した後、両方の 型が決まります。両側は同じです その後、当然のことながら、それ以上のルールはトリガーされなくなり、暗黙的な変換を構成しなくなります。したがって、1 == 1 && 1 == 2 && 1 == 3 は当てはまりません。

今覚えています。面接中に暗記するよりも良いでしょう。

ここで、質問を単純に修正して、二重等号を
に変更します。 3

の場合はどうすればよいですか?

===

が最初に型を決定し、次に値を決定することは誰もが知っています。ここの toString は、デフォルトでオブジェクトを文字列に変換しています。toStirng を使用すると、結果は true になりません。

2.2 defineProperties

オブジェクトを使用したデータ インターセプト方法:

Object.defineProperties(window, {
  _a: {
    value: 0,
    writable: true
  },
  a: {
    get: function() {
      return  ++_a
    }
  }
})

オブジェクト アクセサー関連のコンテンツを含む

これが Vue の監視または計算された命令を思い出させるかどうかはわかりません。

3. まとめ

この面接の質問ができるかどうかは意味がありません。しかし、この面接の質問に含まれる知識ポイントを理解することは非常に興味深いです。

暗黙的な型変換からプロトタイプとプロトタイプ チェーン、そして最後にオブジェクトのアクセス権属性まで。さらに拡張したい場合は、Vue の双方向バインディングの実装原理、クラス内での static の実装などです。

これらが、1 つの知識ポイントから他の関連する知識ポイントに拡張できるフロントエンドの知識システムを構築する必要がある理由です。

[推奨学習:

JavaScript 上級チュートリアル

]

以上が面接の質問: 「a==1&&a==2&&a==3」を true にするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。