ホームページ  >  記事  >  ウェブフロントエンド  >  気絶!インタビューの質問 console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]]) は何を出力しますか?

気絶!インタビューの質問 console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]]) は何を出力しますか?

藏色散人
藏色散人転載
2023-04-12 15:29:22917ブラウズ
この記事は、フロントエンドに関する関連知識を提供します。主に console.log に関するインタビューの質問を共有します。興味のある友人は以下を参照してください。皆さんのお役に立てれば幸いです。

はじめに

インタビューの質問 console.log(([][[]] [])[ !![]] ([] {})[ !![] !![]]) 出力何?面接中にこの面接の質問に遭遇しました。面接の質問は型変換、暗黙的な型変換、演算子などについて調べたものでした。答えることができませんでした。答え方がわからないわけではありません。めまいがしただけです。質問を読んでいるだけです。ただし、面接の質問ですので、ぜひ解いてみてください。

気絶!インタビューの質問 console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]]) は何を出力しますか?

#この問題を解決するには知識が必要です

    " ": 1 元は Number() を使用した場合と同じ変換を実行します
  • 数値が 2 つの数値の加算であり、いずれかのオペランドがオブジェクト、数値、またはブール値の場合、toString メソッドが呼び出されて文字列に変換されます
  • "!": 非演算子、この操作常にブール値を返します
  • "!!": ブール値への強制変換
この問題を解決してください ([][[]] [])[ !![]] ( [] {}) [ !![] !![]]

まず実行順序を明確にする必要があります

最初に実行します([][[]] []) , まず [][[]] 内の [][[]] を実行します。[][[]]

を計算するとき、実際には [ 内のキーを実行します。 ] 空の配列 []
  1. の値 まず、JavaScript エンジンは空の配列 []
  2. を解析します。空の配列には要素がありません。
  3. 次に、エンジンは、プロパティ名として [] を使用して、空の配列のプロパティにアクセスしようとします。この場合、[] 自体は配列であるため、JavaScript エンジンはそれを文字列に変換しようとします。 [] は空の配列であるため、文字列に変換した結果は空の文字列 ""
  4. になります。
  5. 最後に、エンジンは空の配列内の "" という名前のプロパティへのアクセスを試みます。このプロパティは空の配列には存在しないため、結果は unnamed
  6. になります。

したがって、[][[]] の実行結果は unknown

になります。

その後、 ([][[]] [])次の実行は (unknown []) で暗黙的な型変換が実行され、 Convert unknown を文字列 "unknown" に変換し、[] を "" に変換して、2 つの文字列を結合します。したがって、結果は "unknown"

になります。その後、[!![]] を実行すると、!![] 空の配列がブール値 true に変換されます。単項演算は数値に変換されます。true は true を数値 1 に変換します。結果は [1] です。したがって、 ([][[]] [])[ !![]]unknown[1] を取得できます。この結果は、文字列 'n' になります。

次のステップは、([] {})[ !![] !![]]

を実行し、その結果を追加することです。上記の結果を追加します。
  1. まず ([] {}) を実行し、[] {} を計算します。これにより、暗黙的な型変換がトリガーされ、空のオブジェクトが文字列 "[object Object]" に変換され、2 つの文字列が連結されます。したがって、結果は '[オブジェクト オブジェクト]'

    となります。
  2. [!![] !![]]を再度実行します。 !![]解析後の結果は1なので、この部分を実行すると、 get は値 1 を 1 1 に加算することで、結果は [2]

    になります。
  3. 結合された 2 つの部分は '[object Object]'[2]

    であり、これは文字列 b
# # の 3 番目の値です。

#最後に、前段で得られた結果 'n' と後段で得られた結果 'b' を加算して、最終結果 'nb を取得します。 '

要約: この問題が当面解決できない場合は、いくつかの理由が考えられます。1 つ目は、実行順序が明確でないこと、2 つ目は、実行順序が明確でないことです。 clear.[][[]]これは実際には、キー [] を持つ空の配列の値を取得するためのものであり、配列のキーは文字列であるため、[]''# に変換されます。 ## が見つからないため、未定義が返されます。あなたは今、この面接の質問を知っていますか?

推奨学習: 「

Web フロントエンド開発ビ​​デオ チュートリアル

以上が気絶!インタビューの質問 console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]]) は何を出力しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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