[JS]09型変換とショートカット評価


変換タイプ?

  • 明示的タイプ変換=タイプ鋳造
    :値のタイプは、開発者の意図に応じて他のタイプに変換できます.
  • ダークタイプ変換=タイプ強制変換
    :開発者の意図にかかわらず、JavaScriptエンジンによって黙々とタイプとタイプに変換されます.
  • 変数の元の値を直接変更するのではなく、
  • タイプを変更することで、既存の元の値を使用して他のタイプの新しい元の値を生成します.
  • var x = 10;
    
    //명시적 타입 변환
    //숫자를 문자열로 타입 캐스팅
    var str = x.toString();
    console.log(typeof str,str); //string 10
    
    //암묵적 타입 변환
    //숫자 타입의 x의 값을 바탕으로 새로운 문자열을 생성
    var str = x + '';
    console.log(typeof str,str); //string 10
    
    //x 변수의 값이 변경된 것은 아니다.
    console.log(typeof x,x); //number 10

    隠しタイプ変換


    文字列タイプに変換

    1 + '2' = '12
  • の例では、少なくとも1つの被演算子が文字列であるため、+演算子は文字列接続演算子として機能する.
    これを評価するために、JavaScriptエンジンは文字列接続演算子の被演算子を文字列タイプではなく文字列タイプに変換します.
  • //숫자 타입
    0 + ''          //'0'
    -0 + ''         //'0'
    1 + ''          //'1'
    -1 + ''         //'-1'
    NaN + ''        //'NaN'
    Infinity + ''   //'Infinity'
    -Infinity + ''  //'-Infinity'
    
    //불리언 타입
    true + ''       //'true'
    false + ''      //'false'
    
    //null 타입
    null + ''       //'null'
    
    //undifined 타입
    undefined + ''  // 'undifined'
    
    //심벌 타입
    (Symbol()) + '' // TypeError : Cannot convert a Symbol value to a string
    
    //객체 타입
    ({}) + ''       //'[object Object]'
    [] + ''         //''

    数値タイプに変換

    1 - '1'        //0
    1 * '10'       //10
    1 / 'one'      //NaN
    '1' > 0        //true
  • 算術演算子の被演算子では、非数値タイプの被演算子を数値タイプのデフォルトタイプに変換する.
  • //문자열 타입
    //+단항 연산자는 피연산자가 숫자 타입의 값이 아니면 숫자 타입의 값으로 암묵적 타입 변환을 수행한다.
    + ''           //0
    + '0'          //0
    + '1'          //1
    + 'string'     //NaN
    
    //불리언 타입
    + true         //1
    + false        //0
    
    //null 타입
    + null         //0
    
    //undefined 타입
    + undefined    //NaN
    
    //심벌 타입
    + Symbol()     // TypeError : Cannot convert a Symbol value to a number
    
    //객체 타입
    + {}            //NaN
    + []            //0
    + [10,20]       //NaN
    + (function(){})//NaN
    ☝🏻 空の文字列(")、空の配列([])、null、falseを0、trueを1に変換します.
    オブジェクトと空でない配列、undefinedはNANに変換されません.

    ブール型に変換

  • 条件式の評価結果を不規則型に変換する.
  • if ('') console.log('1');
    if (true) console.log('2');
    if (0) console.log('3');
    if ('str') console.log('4');
    if (null) console.log('5');
    
    //2 4
  • javascriptエンジンは、ブール以外のタイプの値をTruthy値(真値)またはFalsy値(偽値)に区別します.
    ☝🏻 Falsy値
    false/undefined/null/0,-0/NAN/"(空の文字列)
    それ以外の値はすべて真の値です.
  • 明示的なタイプ変換


    文字列タイプに変換


    1.new演算子を使用せずにStringコンストラクタを呼び出す

    //숫자 > 문자
    String(1);         //'1'
    String(NaN);       //'NaN'
    String(Infinity);  //'Infinity'
    //불리언 > 문자
    String(true);      //'true'
    String(false);     //'false'

    2. Object.prototype.TOStringメソッドの使用方法

    //숫자 > 문자
    (1).toString();        //'1'
    (NaN).toString();      //'NaN'
    (Infinity).toString(); //'Infinity'
    //불리언 > 문자
    (true).toString();      //'true'
    (false).toString();     //'false'

    3.文字列接続演算子の使用方法

    //숫자 > 문자
    1 + '';         //'1'
    NaN + '';       //'NaN'
    Infinity + '';  //'Infinity'
    //불리언 > 문자
    true + '';      //'true'
    false + '';     //'false'

    数値タイプに変換


    1.new演算子を使用せずにNumberジェネレータ関数を呼び出す

    //문자 > 숫자
    Number('0');       //0
    Number('-1');      //-1
    Number('10.53');   //10.53
    //불리언 > 숫자
    Number(true);       //1
    Number(false);      //0

    2.ParseInt、ParseFloat関数の使用方法(文字列のみを数値に変換)

    //문자 > 숫자
    parseInt('0');       //0
    parseInt('-1');      //-1
    parseInt('10.53');   //10.53

    3.+単項演算子を使用する方法

    //문자 > 숫자
    +'0';         //0
    +'-1';        //-1
    +'10.53';     //10.53
    //불리언 > 숫자
    +true;        //1
    +false;       //0

    4.*算術演算子の使用方法

    //문자열 > 숫자
    '0' * 1;      //0
    '-1' * 1;     //-1
    '10.53'* 1;   //10.53
    //불리언 > 숫자
    true * 1;     //1
    false * 1;    //0

    ブール型に変換


    1.new演算子を使用せずにBooleanコンストラクタを呼び出す

    //문자 > 불리언
    Boolean('x');        //true
    Boolean('');         //false
    Boolean('false');    //true
    //숫자 > 불리언   
    Boolean(0);          //false
    Boolean(1);          //true
    Boolean(NaN);        //false
    Boolean(Infinity);   //true
    //null > 불리언
    Boolean(null);       //false
    //undefined > 불리언
    Boolean(undefined);  //false
    //객체 > 불리언
    Boolean({});         //true
    Boolean([]);         //true

    2.否定論理演算子を2回使用する方法

    //문자 > 불리언
    !!'x';        //true
    !!'';         //false
    !!'false';    //true
    //숫자 > 불리언   
    !!0;          //false
    !!1;          //true
    !!NaN;        //false
    !!Infinity;   //true
    //null > 불리언
    !!null;       //false
    //undefined > 불리언
    !!undefined;  //false
    //객체 > 불리언
    !!{};         //true
    !![];         //true

    迅速な評価


    &(論理乗算)

  • 論理乗算子は、2つの被演算子がtrueである場合にtrueを返す.
    したがって,上記式を評価するには2番目の被演算子まで評価を行い,2番目の被演算子は論理乗算子式の評価結果を決定する.
  • |(論理)

  • 論理演算子.2つの演算子のうち1つだけがtrueの場合、trueが返されます.
    したがって、2番目の被演算子を計算しなくても、1番目の被演算子がtrueである場合、論理演算結果を決定するのは1番目の被演算子である.
  • 迅速な評価


    :評価式のプロセスで評価結果が決定された場合、他の評価プロセスはスキップされ、タイプを変換せずに論理演算結果を決定する評価者に直接戻ります.

    論理乗算短縮計算を使用してif文を置き換える

    var done = true;
    var message = '';
    
    //주어진 조건이 true일 때
    if (done) message = '완료';
    
    //단축 평가로 대체
    message = done && '완료';
    console.log(message); //완료

    if文を論理加速評価で置き換える

    var done = false;
    var message = '';
    
    //주어진 조건이 false 때
    if (!done) message = '미완료';
    
    //단축 평가로 대체
    message = done || '미완료';
    console.log(message); //미완료

    光学フィルタ演算子


    :ES 11を導入し、傍観者フィルタ演算子を使用しますか?左の演算子がnullまたはundefinedの場合、undefinedが返されます.そうしないと、右のproperty参照が続行されます.
    var str = '';
    var length = str?.length;
    console.log(length); //0
    
    var elem = null;
    var value = elem?.value;
    console.log(value); //undefined

    空の連結演算子


    :ES 11に空の連結演算子が導入されましたか?左の被演算子がnullまたはundefinedの場合、右の被演算子が返され、そうでない場合、左の被演算子が返されます.
    var foo = null ?? 'default string';
    console.log(foo); //'default string'
    
    var Foo = '' ?? 'default string';
    console.log(Foo); //''