現代JavaScript Deep Dive 9章-タイプ変換と迅速評価

2754 ワード

タイプ変換とは?

  • 明示型変換(型鋳造)
  • ダークタイプ変換
  • JSエンジンは、演算子の値を暗黙的に変換し、新しい値を生成して一度使用し、式を誤って計算しないように破棄します.

    隠しタイプ変換


    コードのコンテキストを考慮して、デフォルトの強制変換データ型

    文字列タイプに変換


    +:被演算子に文字列がある場合は、文字列接続演算子であり、すべての被演算子が文字列の暗黙的なタイプに変換されます.
    0 + ''            // '0'
    null + ''         // 'null'
    [1,2,3,4] + ''    // '1,2,3,4'
    

    数値タイプに変換

  • 算術演算子所在市
  • 比較演算子値
  • +''         // 0
    +undefined  // NaN
    +{}         // NaN
    +[]         // 0
    +[1,2,3]    // NaN

    ブール型に変換

  • 条件式の評価結果
    6個の
  • Falsyしきい値:未定義、null、0、"、false、Nan
  • 6個の
  • Falsy値は含まれず、すべての値がブール値に変換されたときにtrue
  • となる.

    明示的なタイプ変換


    呼び出し
  • 標準ビルダー関数
  • バージョンメソッド
  • を使用

    文字列タイプに変換

    String(100);  
    (100).toString(); 
    100 + '';

    数値タイプに変換

    Number('100');
    parseInt('100');
    parseFloat('3.14');
    +'100';
    '100' * 1;
    

    ブール型に変換

    !!값 
    !!0              // false
    Boolean({})      // true
    Boolean([])      // true
    

    迅速な評価


    論理演算子による迅速な評価

  • は、論理演算結果を決定する被演算子
  • をタイプ変換なしに返す.
    評価結果が
  • 式で決定された場合、残りの評価プロセス
  • はスキップされる.
    true && anything    // anything
    false && anything   // false
    
    true || anything    // true
    false || anything   // anything
    デフォルトは
  • ||
  • を使用
    const sayHi = (name) => {
    	name = name || '사용자';
        console.log(`안녕하세요 ${name}님`);
    }
    
    // es6 기본값 설정
    const sayHi2 = (name='사용자') => {
        console.log(`안녕하세요 ${name}님`);
    }
    
    sayHi();    // 안녕하세요 사용자님
    関数を呼び出すときにパラメータがない場合は、未定義として指定します.
  • オブジェクトを指す変数がnullまたはundefinedの場合、propertyを参照するとエラーが発生します.これを回避しようとすると、
  • を使用します.
    let elem = null;
    let value = elem.value  // null인데 프로퍼티 참조하면 에러남
    let value = elem && elem.value // value는 null 할당, 에러 안남

    光学フィルタ演算子


    ?.
    左端の演算子が未定義or nullの場合、未定義の
    または右航propertyに戻ります
    &&を使用してPropertyリファレンスエラーを防止できますが、次の場合は問題が発生します.
    let name = '';
    let length = name && name.length; // length는 ''가 됨, 문제발생
    let length = name?.length // length 는 0 
    

    空の連結演算子


    ??
    左項目の演算子が未定義or nullの場合、右項目を返します.
    さもないと左港に戻ります
    変数のデフォルト設定に使用可能
    ||も可能ですが、値が0の場合falsey値となりますので問題が発生します
    let age = 0 || 20 // 0살을 원했는데 0이 falsy한 값이니 age=20이 됨
    let age = 0 ?? 20 // age=0