2020インタビューの質問

図1に示すように、決定された JS タイプの方法を

溶液: A typeof演算に基づいて、(「文字列」、「数」、「ブール」、「未定義」、「シンボル名」が、決意のtypeof演算(ヌル)値は「オブジェクト」; 分析時間配列とオブジェクトの両方'オブジェクト' ); B instanceofはVARのSTR =新しい新しいString 'こんにちは' );はconsole.log(STR文字列のinstanceof); // trueに)。

2 ES5 およびES6は、変数を宣言するには、いくつかの方法があります

溶液: A ES5 二種類がある:VAR   機能; B ES6用は6である:四種類が増加し、LET CONST クラス  および インポート

3 、閉鎖コンセプト?パッケージを閉じるの長所と短所?

溶液:コンセプト:クロージャ内部変数は、他の機能の関数として読み取ることが可能です。

利点:

A グローバル変数の汚染を避けるために

B メモリに保存されている長期的な変数をしたい(キャッシュ変数)

短所:

A メモリリーク(消費)

B パーマネントメモリ、メモリ使用量の増加

4 、深い浅いコピーのコピー

ソリューション:意味:と仮定 ; Bが変更されていない場合は、マンパワーの短い取る、それはディープコピーであるAのBコピー、Aを修正、BはBにも、これは浅いコピーであると述べ、変更続く場合は変更が起こるかどうかを確認します。

シャローコピー:

= [0,1,2,3,4]みましょう、

     B =。

console.log(=== B)。//真

[0] = 1;

console.log(a、b)は、1,1,2,3,4

ディープコピー:

= [0,1,2,3,4]みましょう、

     B = a.slice()。

[0] = 2;

console.log(a、b)は、//:2,2,3,4 B:1,2,3,4

 

関数deepClone(OBJ){

objClone = Array.isArray(OBJ)とします[]:{};?

    もし(OBJ && typeof演算OBJ === "オブジェクト"){

        {(OBJ内のキー)のために

            IF(obj.hasOwnProperty(キー)){

                //それは、再帰的なコピーである場合、オブジェクトは、OJB子要素であるかどうかを判断します

                もし(OBJ [キー] && typeof演算OBJ [キー] === "オブジェクト"){

                    objClone [キー] = deepClone(OBJ [キー])。

                }そうしないと{

                    //そうでない場合は、単純にコピーします

                    objClone [キー] = OBJ [キー]。

                }

            }

        }

    }

    objCloneを返します。

}    

= [1,2,3,4]みましょう、

B = deepClone()。

[0] = 2;

console.log(B); // [2,2,3,4]、[1,2,3,4]

図5に示すように、重複排除のアレイ法

ソリューション:

F1:.ES6セット:

[1,1,2,3,4,5,5,6] ARR =ましょう

聞かせてARR2 = [...新しいセット(ARR)] // [1,2,3,4,5,6]

F2:削減:

[1,1,2,3,4,5,5,6] ARR =ましょう

{ARR2 = arr.reduce(関数(AR、CUR)させ

   もし(!のar.includes(CUR)){

     Arkpus(たCur)

   }

   リターンAR

}、[])

F3:フィルタ:

[1、1「」]最終的な入力と同じ要素である[1]://この方法は、問題があります

[1,1,2,3,4,5,5,6] ARR =ましょう

{ARR2 = arr.filter(関数(項目、インデックス)させ

  //のindexOf()メソッドは、文字列の最初の出現の指定された位置の文字列値を返します

  リターンarr.indexOf(アイテム)===インデックス

})

6、入力した URLが起こるでしょうか?

ソリューション:

、DNS DNS(IPアドレスへのドメイン名、UTPプロトコルを行くので、何のハンドシェイクがありません):ブラウザのURL 対応するサーバの解析 IPアドレス2を見つけるためにローカルブラウザ上で(1 DNSキャッシュを。再びシステムDNS キャッシュの送信要求を再度4.ネットワークオペレータのDNSキャッシュ再帰検索)ルータ3. DNSキャッシュ、およびからの URLのポート番号アウト解析。

B、確立するために、ブラウザとターゲットサーバのTCP接続(3ウェイハンドシェイクを)。

C、ブラウザがサーバに送信するHTTPリクエスト。

D、ブラウザにサーバ戻る HTTP応答メッセージ。

E、レンダリングするためのブラウザ。

F、クローズ TCP接続(四の光波)。

解決策 2:

1. URLを入力します。

2. に送信された DNSサーバ、およびWebサーバに対応するIPアドレスに対応するドメイン名を取得し、

3. するために、WebサーバへのTCP接続を確立します。

4. ために、ブラウザのHTTPリクエストのWebサーバに送ります。

要求戻るURLを指定するデータ(またはエラー・メッセージ、またはリダイレクトURL新しいアドレス)に5.webサーバ応答。

6. ブラウザは、ダウンロードしたデータは、Webサーバーおよび解析のHTMLソースファイルで返されます。

7. 生成された DOMツリー、および表示が完了するまで、ページのレンダリングを解析するCSSのJS、。

 

7、GETとPOSTの違いを要求します

ソリューション:

URLにパラメータを渡すGET、POSTは、体内に配置されました。

リクエストURLに渡されたパラメータの長さが制限されている、ないPOSTをGET。

GET代替ブラウザは無害であり、かつPOSTリクエストを再提出するとき。

手動で設定しない限りGETリクエストは、POSTはないでしょう、アクティブキャッシュブラウザです。

POSTは、POSTが限定されるものではないが、GETは、ASCII文字のみを受け入れるURLパラメータを直接さらさので、パラメータのデータ型に機密情報を送信するために使用することはできません、GETよりも安全です。

GETリクエストURLのみ(x-www-form-urlencodedで)符号化、およびPOSTをコードする様々なサポート。

GETは、TCPパケットを生成し、POSTの2つのTCPパケットを生成します。GETリクエストのために、ブラウザ意志HTTPヘッダとデータは、サーバ応答200(リターンデータ)と一緒に送りました。POSTのために、ブラウザは最初のヘッダを送信し、サーバ応答100は、サーバ200 OK(リターンデータ)に応答して、ブラウザは、データを送信し、継続します

HTTPよりも8、HTTPS

ソリューション:

HTTPSプロトコルは、証明書は、一般的に有料に無料で少し必要で、証明書を要求するCAが必要です。

TCPの上のHTTPプロトコルの実行は、すべての内容はクリアテキストで送信され、HTTPSは、SSL / TLS上で動作し、SSL / TLSは、すべての送信内容が暗号化されている、TCP上で実行されます。

ポートが同一でないと、HTTPおよびHTTPS接続を使用して、完全に異なっている、前者は443であり、80です。

HTTPSは、効果的に抗ハイジャックの大きな問題を解決するための演算子をハイジャック防止することができます。

9、差腕時計、方法とで計算?

ソリューション:

、モニタへのデータは、時計に応じて変化します。自動的に動的にリターンに依存計算された値の変化を監視し、主な目的は、テンプレートの複雑な計算を単純化することです。違いは、使用から来るので、ちょうどその計算使用し、動的な値を必要とし、唯一の時計で、変更の価値を知るために、ビジネス・ロジックのニーズを実行します。

B、メソッドはパラメータを受け入れることができます方法であり、かつ、キャッシュを計算することができ、ない方法計算することはできません。計算された他の、あるいは他のデータ要素とは独立して計算することができます。

10、関連の配列

ソリューション:

  1. プッシュの長さ()後から添加元素は、戻り値は、配列の後に追加されます
  2. ポップ()先頭の要素を削除するために、戻り値の一つだけの要素が削除されています
  3. シフトは、()の要素を削除する前に値を返し、それだけで削除された要素から削除することができます
  4. 上記から要素を追加する抜き()は、戻り値は、配列の長さの後に追加されます
  5. CONCAT()は、2つの新たなアレイのアレイが接続部に接続されて返します
  6. スプリットは、(i、j)は、スペース、改行(\ N-)、タブ(\ t)と同様に含めたセパレータi--文字列の配列、すべてのヌル文字のデフォルト、に変換されます。j--スプリット回。-1デフォルト、すなわち、すべてのパーティション
  7. ソート()配列をソートするには、良好な戻り値は行の配列であり、デフォルトは、図面の大きさに応じて左端の桁に従ってソートされていないソートされ
  8. 逆()配列を逆に、戻り値は、逆の配列であります
  9. スライス配列インデックス値のインデックス開始端を切断する(始端)、インデックスが終了値が含まれていない、戻り値は、カットアウトの配列であります  
  10. 反復するforEachの(コールバック)、ノーリターンコールバックパラメータ:value - インデックスindexの電流値 - インデックス配列 - 元の配列
  11. マップ(コールバック)マッピングアレイ(反復)は、新たなコールバックパラメータを戻すリターンの配列がある:インデックスindexのitem--電流値 - インデックスARR - 元の配列
  12. フィルタ(コールバック)フィルタアレイ、アレイの要件を満たすためにリターン
  13. 文字列に、アレイ内のすべての要素()メソッドへの参加。要素は、指定された区切り文字によって分離されます。デフォルトは,;

13、Promise.all()使用

溶液:例Promise.all()バッチ実行、Promise.all([P1、P2、 P3]) 新しいインスタンスプロミスにパッケージインスタンスの約束複数のリターンは、共通の約束であります

おすすめ

転載: www.cnblogs.com/zaijin-yang/p/12509930.html