検索
JavaScriptの基礎データを整理するFeb 28, 2019 pm 01:16 PM
javascriptフロントエンドインタビュー

この記事は JavaScript の基本的なデータを整理するものです。必要な方は参考にしていただければ幸いです。

いくつかの情報を読んだ後、ES6、標高、MDN と組み合わせて、JS の中核となる知識ポイントを整理しました。紙面の都合上、ここでは重要と思われる知識のみ紹介します。いくつかの常識的なことについては標高を参照することができ、いくつかの核となる知識点の拡張については私の他の記事を参照することができます。この記事は、JS ナレッジ ポイントの復習や意外な使用に適しており、フロントエンドのインタビュー ガイドとしても使用できます。

7 つのデータ型

基本データ型: スタック メモリに格納され、値を操作します

null: null ポインター、つまり typeof null ==>Object

unknown: 未割り当ての値が定義されています。

Number: 数値

String: String

Symbol: インスタンスは、一意で不変のデータ型です。

ブール値: ブール値

参照データ型: ヒープ メモリに保存され、空間アドレスで動作します

オブジェクト: 具体的には、配列、関数、正規表現、日付などです

データ型の判定(方法、メリット、デメリット)

typeof: 基本型の非Nullのみ判定可能、参照データ型の判定は不可(全てオブジェクトのため)これは演算子

typeof ''  // ==> string
typeof 1  //==> number
typeof true  //==>boolean
typeof undefined  //==>undefined
let b = Symbol() ; typeof b //==>symbol
-----------------下面的判断不了实际类型了-----------------------
typeof function fn(){} //==>function
typeof null //==>object
typeof [1,2,3] //==>object
typeof {} //==>object

instanceof: コンストラクターのプロトタイプ属性がオブジェクトのプロトタイプ チェーンのどこかに現れるかどうかをテストするために使用されます。これを使用して配列を判断することはできますが、十分エレガントではありません。特定のリスクがあります

let arr = [1,2,3]
arr instanceof Array //==>true
arr instanceof Object //==>true
instanceof 演算子の問題は、Web ページに複数のフレームがある場合、実際には 2 つ以上の異なるグローバル実行環境が存在することです。配列コンストラクターのさまざまなバージョン。配列があるフレームから別のフレームに渡される場合、受信配列と 2 番目のフレームでネイティブに作成された配列は異なるコンストラクターを持ちます----高さ ページ 88 (著者による現地語訳: リスクは、プロトタイプ チェーン )

コンストラクター: 原理もプロトタイプ チェーンに基づいており、複数のフレーム間を往復する場合など、プロトタイプ チェーンの書き換えからもリスクが生じます。現時点では、これら 2 つの方法が最適です。各 iframe には独自の実行環境があるため、フレーム間でインスタンス化されたオブジェクトは相互にプロトタイプ チェーンを共有せず、そのため上記の検出コードが失敗します!

isNaN:このメソッドは最初に Number ## を呼び出します。 #、あまり役に立ちません

   console.log(isNaN("1px"));   //先调用Number('1px'),返回NaN,然后再调用isNaN(NaN)返回true
   //燃鹅 '1px'客观并不是NaN
rree----------------------------- -- -----------より良い方法---------------------------------

Object.prototype.toString.call()

    [1,2,3,1].constructor === Array; // true
---------------------------- ---- ----------------エレガントな方法---------------------

判断する必要がある場合個別に配列

    Object.prototype.toString.call(null) // ==> [object Null]
    Object.prototype.toString.call([]) // ==> [object Array]
nullを個別に判定する必要がある場合

Array.isArray([]) //==>true
変数を宣言する6つの方法

ES5では、変数を宣言する方法は var コマンドと function コマンドの 2 つだけです。 let および const コマンドの追加に加えて、ES6 では後の章で変数を宣言する 2 つの方法、import コマンドと class コマンドについても説明します。したがって、ES6 には変数を宣言する方法が合計 6 つあります。 --es6
var: 変数のプロモーション、ブロックレベルのスコープなし

var に関しては、変数のプロモーションについて言及する必要があります。現在のスコープ、js (関数) が実行される前、ブラウザが持ってきます var や関数は事前に宣言・定義しておきます

  1. 変数は宣言のみ、関数は宣言・代入、自己実行関数の定義と実行は一緒に完了します

  2. # 論理判定条件の影響を受けない
  3. #return 以下も昇格するが、return は昇格しない
  4. ステートメントの重複は問題なく、再代入は Yes ですが、変数名とメソッド名が競合することはできません
  5. const: 定数、アドレスは変更されませんが、属性は変更できます
let: ブロック スコープ、一時デッド ゾーン (TDZ)、変数プロモーションなし、繰り返し宣言は許可されません

let a = null
Object.is(a , null) //==>true

import:es6 モジュラー ソリューション

class:es6 継承ソリューション

型変換

このセクションは内容が多すぎて複雑すぎます。実際、このようなコードを書ける人はほとんどいないので、あまり書きたくないのです。しかし、これは非常に重要なので、面接でテストする必要があります。全員がこの領域の核となる内容と原則をマスターし、奇妙なトリックに注意を払わないことをお勧めします。

1. 自動パッケージ化

3 つのパッケージ化タイプ: Number、Boolean、String

//只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。所以下面代码不报错,外层作用域和里层作用域都有一个tmp
let tmp = 123;
    if (true) {
      let tmp =123;    
    }
//ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
    let tmp = 123;
    if (true) {
      tmp = 'abc'; // ReferenceError
      let tmp;    
    }

これらのタイプ (コンストラクター) は基本的に tostring メソッドを書き換えます

2. 数値への強制変換

##数値: 他のデータ型の値を数値型に強制します。

    #
let s1 = '123'
let s2 = s1.slice(2)         // a是基本类型,它是没有slice方法的这里实际上后台完成了一个自动装包
---下面是实际发生的事---------
let s1 = new string('123')
let s2 = s1.slice(2)     
s1 = null      //注意这里用完就销毁了

//所以如果添加某个属性后面是调用不出来的
let s1 = '123'
s1.color = 'red'
console.log(s1.color) // ==> undefind
  • parseInt: 文字列から数値を抽出するためによく使用されるメソッド。無効な数値が見つかるまで文字列を左から右に識別し、停止して、見つかった数値を返します。
        console.log(Number({}));//NaN
        console.log(Number(null));// 0
        console.log(Number(undefined));// NaN
        console.log(Number([]));// 0
        console.log(Number(""));// 0
        console.log(Number(true));// 1
        console.log(Number(false));
    • toFixed: 小数点の数を保持するメソッド、
    • 戻り値は文字列です

      ;

      console.log(parseInt("12px12"));// 12
      console.log(parseInt("12.666.777px12"));// 12
      console.log(parseInt("px12.666px12"));// NaN
      console.log(parseInt(""));// NaN
      console.log(parseInt(true));// NaN
      console.log(parseInt({}));// NaN
      console.log(parseInt([]));// NaN
      console.log(parseInt(null));// NaN
      console.log(parseInt(undefined));// NaN
      3.- Conversion
    • は、まず文字列を数値 (Number) に変換してから、計算を実行します。

      NaN、undiffed を含む計算は、Is it NaN
    • # となることに注意してください。 ##
        console.log(Number("1px"));   //==> NAN
        console.log(parseInt("1px"));   //==> 1
        console.log(parseInt("p1px"));   //==> NaN

    4. 変換

    特定の通話文字列または番号については、以下の表を参照してください

                || undefined | null   | boolean | number | string | object |
    =========================================================================
     undefined  || number    | number | number  | number | string | string | 
     null       || number    | number | number  | number | string | string | 
     boolean    || number    | number | number  | number | string | string | 
     number     || number    | number | number  | number | string | string | 
     string     || string    | string | string  | string | string | string | 
     object     || string    | string | string  | string | string | string |
        //字符串和任何类型相加都是调用String
        var  a = typeof 10 + true + [] + null + undefined+{};
        console.log(a); //==>numbertruenullundefined[object Object],{}
        console.log("6px"+undefined); ==> 6pxundefined
        console.log(NaN+"undefined");==> NaNundefined
        //经典面试题
        [1,2]+[2,1]  //==>都调用toString '1,2'+'2,1'===>'1,22,1'

    5.布尔值Boolean

    其他数据类型转布尔类型是false有且只有五个值: 0  ""  NaN null  undefined  
    所以boolean({}) 或者boolean([]) 都是真

    6.==和===

    ===是全等,==是类型转化后再判断,规则比较复杂。这里我认为除了准备面试需要看看,平时基本不会用,所以这个知识性价比非常低,学了用不到也会忘,大家自己把握,详细规则可以搜我其他文章
    平时除了判断a是否是undefined或者是null(jq源码里面都用法)都时候其他情况下都用===

    console.log(null==undefined) // true
    console.log(undefined==undefined) // true


    以上がJavaScriptの基礎データを整理するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明
    この記事はsegmentfaultで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
    巧用CSS实现各种奇形怪状按钮(附代码)巧用CSS实现各种奇形怪状按钮(附代码)Jul 19, 2022 am 11:28 AM

    本篇文章带大家看看怎么使用 CSS 轻松实现高频出现的各类奇形怪状按钮,希望对大家有所帮助!

    5个常见的JavaScript内存错误5个常见的JavaScript内存错误Aug 25, 2022 am 10:27 AM

    JavaScript 不提供任何内存管理操作。相反,内存由 JavaScript VM 通过内存回收过程管理,该过程称为垃圾收集。

    Node.js 19正式发布,聊聊它的 6 大特性!Node.js 19正式发布,聊聊它的 6 大特性!Nov 16, 2022 pm 08:34 PM

    Node 19已正式发布,下面本篇文章就来带大家详解了解一下Node.js 19的 6 大特性,希望对大家有所帮助!

    实战:vscode中开发一个支持vue文件跳转到定义的插件实战:vscode中开发一个支持vue文件跳转到定义的插件Nov 16, 2022 pm 08:43 PM

    vscode自身是支持vue文件组件跳转到定义的,但是支持的力度是非常弱的。我们在vue-cli的配置的下,可以写很多灵活的用法,这样可以提升我们的生产效率。但是正是这些灵活的写法,导致了vscode自身提供的功能无法支持跳转到文件定义。为了兼容这些灵活的写法,提高工作效率,所以写了一个vscode支持vue文件跳转到定义的插件。

    浅析Vue3动态组件怎么进行异常处理浅析Vue3动态组件怎么进行异常处理Dec 02, 2022 pm 09:11 PM

    Vue3动态组件怎么进行异常处理?下面本篇文章带大家聊聊Vue3 动态组件异常处理的方法,希望对大家有所帮助!

    聊聊如何选择一个最好的Node.js Docker镜像?聊聊如何选择一个最好的Node.js Docker镜像?Dec 13, 2022 pm 08:00 PM

    选择一个Node​的Docker镜像看起来像是一件小事,但是镜像的大小和潜在漏洞可能会对你的CI/CD流程和安全造成重大的影响。那我们如何选择一个最好Node.js Docker镜像呢?

    聊聊Node.js中的 GC (垃圾回收)机制聊聊Node.js中的 GC (垃圾回收)机制Nov 29, 2022 pm 08:44 PM

    Node.js 是如何做 GC (垃圾回收)的?下面本篇文章就来带大家了解一下。

    【6大类】实用的前端处理文件的工具库,快来收藏吧!【6大类】实用的前端处理文件的工具库,快来收藏吧!Jul 15, 2022 pm 02:58 PM

    本篇文章给大家整理和分享几个前端文件处理相关的实用工具库,共分成6大类一一介绍给大家,希望对大家有所帮助。

    See all articles

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

    AIヘンタイを無料で生成します。

    ホットツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    mPDF

    mPDF

    mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

    SublimeText3 中国語版

    SublimeText3 中国語版

    中国語版、とても使いやすい

    EditPlus 中国語クラック版

    EditPlus 中国語クラック版

    サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

    VSCode Windows 64 ビットのダウンロード

    VSCode Windows 64 ビットのダウンロード

    Microsoft によって発売された無料で強力な IDE エディター