[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
これを評価するために、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
☝🏻 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番目の被演算子まで評価を行い,2番目の被演算子は論理乗算子式の評価結果を決定する.
|(論理)
したがって、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); //''
Reference
この問題について([JS]09型変換とショートカット評価), 我々は、より多くの情報をここで見つけました https://velog.io/@skdud4659/JS09타입-변환과-단축-평가テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol