変数#ヘンスウ#


変数バー


変数は、値を格納する場所のリポジトリです.値が存在する値が存在するメモリのアドレス.すなわち、変数とは、値が存在するメモリアドレスにアクセスするために、理解できる言語で命名された識別子を指す.
JavaScriptはダイナミックタイプ言語です.この言葉の意味は固定的なタイプがないということです.
これにより、同じ変数に複数のタイプの値を自由に割り当てることができます.

データ型


データ型とは、プログラミング言語で使用できるデータ型です.

  • 元のタイプ
  • number
  • string
  • boolean
  • undefined
  • null
  • 符号(ES 6に追加)

  • 元のタイプ
  • object
  • 元のタイプ


    1. number


    CまたはJavaの場合、int、long、float、doubleなどの数値タイプがあり、整数と実数を区別します.
    var integer = 10;        // 정수
    var double = 10.12;      // 실수
    var negative = -20;      // 음의 정수
    var binary = 0b01000001; // 2진수
    var octal = 0o101;       // 8진수
    var hex = 0x41;          // 16진수
    しかし、JavaScriptにはユニークに1つの数字タイプしか存在しない.JavaScriptの数値タイプは整数には適用されず、すべての数値を処理できます.整数として表示されても、実際にはエラーです.
    console.log(1 === 1.0); // true
    
    var result = 4 / 2;
    console.log(result); // 2
    また、3つの特殊値を表すこともできます.
  • 無限:正の無限大
  • -無限:音の無限大
  • NaN:算術演算不可
  • var pInf = 10 / 0;  // 양의 무한대
    console.log(pInf);  // Infinity
    
    var nInf = 10 / -0; // 음의 무한대
    console.log(nInf);  // -Infinity
    
    var nan = 1 * 'string'; // 산술 연산 불가
    console.log(nan);       // NaN

    2. string


    文字列(String)タイプは、テキストデータを表すために使用されます.
    var str = "string"; // 큰 따옴표
    str = 'string';     // 작은 따옴표
    str = `string`;     // 백틱(ES6 템플릿 리터럴)
    
    str = "큰 따옴표로 감싼 문자열 내의 '작은 따옴표'는 문자열입니다.";
    str = '작은 따옴표로 감싼 문자열 내의 "큰 따옴표"는 문자열입니다.';
    JavaScriptの文字列は元のタイプで、変更できません(可変).
    これは、文字列が作成されると、その文字列を変更できないことを意味します.
    var str = 'Hello';
    str = 'world';
    最初の構文が実行されると、メモリに文字列「Hello」が作成され、識別子strはメモリに作成された文字列「Hello」のメモリアドレスを指します.次に、2番目の構文を実行すると、以前に作成した文字列「hello」を変更するのではなく、メモリに新しい文字列「world」が作成され、識別子strがそれを指します.文字列「Hello」も「world」もメモリに存在します.変数strは文字列「hello」を指し、文字列「world」を指すように変更されます.
    配列のようにインデックスを使用して文字列にアクセスできます.
    これらの特性を有するデータを類似アレイと呼ぶ.
    str[0] = 'S'
    生成された文字列の一部(上のコードなど)を変更しても、これらの文字は反映されません.生成された文字列はread onlyに変更できません.これを変更不可(可変)と呼びます.

    3. boolean


    booleanタイプの値は、論理真または偽のtrueとfalseを表すだけです.
    var foo = true;
    var bar = false;
    
    console.log(typeof foo); // boolean
    console.log(typeof bar); // boolean
    条件文では、ブール型の値はプログラムフローを制御する条件によく使用され、条件文は真と偽に区別されます.空の文字列とnull、undefined、および数値0はfalseとみなされます.

    4. undefined


    宣言後に値が割り当てられていない変数には、未定義の値があります.すなわち、宣言された値が割り当てられていない変数にアクセスするか、存在しないオブジェクト構成にアクセスすると、未定義が返されます.これは、JavaScriptエンジンがundefinedに初期化され、変数宣言で得られたメモリ領域が最初の割り当てが完了するまで空に保持されないためです.
    var foo;
    console.log(foo); // undefined
    これらの値は、定義されていないJavaScriptエンジンによって初期化されます.

    5. null


    nullは、変数に値がないことを示すために使用されます.これは、変数が記憶しているメモリアドレスの参照情報を削除し、JavaScriptエンジンが誰にも参照されていないメモリ領域に対して不要なセットを実行することを意味します.
    ごみ収集:メモリの割り当てを追跡し、割り当てられたメモリ領域が不要な領域であるかどうかを決定し、回収します.
    var foo = 'Lee';
    foo = null;  // 참조 정보가 제거됨을 의미합니다.
    戻りタイプ文字列のtype of演算子を使用してnull値を計算すると、nullではなくオブジェクトが表示されます.これはJavaScript設計のエラーです.
    var foo = null;
    console.log(typeof foo); // object
    したがって、空のタイプをチェックする場合はtypeof演算子は使用できませんが、一致演算子(==)を使用します.
    var foo = null;
    console.log(typeof foo === null); // false
    console.log(foo === null);        // true

    6. symbol


    SymbolはES 6に新しく追加された7番目のタイプで、元のタイプの変更不可値です.シンボルは、主に名前の競合のリスクのない唯一のオブジェクトを作成するpropertyキーに使用されます.シンボルはSymbol関数を呼び出して作成されます.このときに生成される素子値は、他の素子値とは異なる一意の素子値である.
    var key = Symbol('key');
    console.log(typeof key); // symbol
    
    var obj = {};
    obj[key] = 'value';
    console.log(obj[key]); // value

    オブジェクトタイプ


    オブジェクトは概念的な存在であり、データとその動作を含めることができます.すなわち、名前と値を持つデータを表すプロセスと、動作を表す方法を含む独立したボディである.
    元のタイプ以外のすべての値(配列、関数、正規表現など)がオブジェクトです.オブジェクトも参照を渡す(参照によって渡す)ように渡されます.

    がんばって

    console.log(foo); // ① undefined
    var foo = 123;
    console.log(foo); // ② 123
    変数fooはまだ①で宣言されていないため、ReferenceError:foois not definedが発生することを期待するかもしれませんが、コンソールは未定義のものを出力します.JavaScriptのすべての宣言はエスケープされているからです.
    コード記述はJavaScriptで最も有名な特性の一つであり、コードのロード時に実行コンテキストを生成し、宣言された変数、関数をディレクトリの最上位レベルに昇格させ、コード記述と呼ぶ.
    Lexical Scope:プロトタイプベースの言語JavaScriptでは、語彙範囲は「近接」、すなわち「近接」の「近接」です.
    ゆっくりと下のコードストリームに沿って歩きます.
    // 전역 실행 컨텍스트 생성. 전체 정의(name, init) 호이스팅
    var name = 'Kai'; // ...1번 
    init(); // init 실행 컨텍스트 생성. 내부 정의(name, displayName) 호이스팅 ...2번
    function init() { // ...3번
        var name = "Steve";
        function displayName() {  // ...4번
          console.log(name); // 현재 실행 컨텍스트 내에 정의된게 없으니 outer 로 chain
          // var name = 'troll?'; // 주석 해제되면 호이스팅
        }
        displayName(); // displayName 실행 컨텍스트 생성. 내부 정의 호이스팅.
    }

    Referance


    Poiemaweb:データ型と変数
    任成黙:JavaScriptがprototypeを選んだのはなぜですか。