const num = 10;
const str = (10).toString();
console.log(typeof num, typeof str); // number string
const num = 10;
const str = 10 + "";
console.log(typeof num, typeof str); // number string
문자열 연결 연산자(+
)의 문자열 타입이 아닌 피연산자를 문자열 타입으로 변환함
템플릿 리터럴 내의 표현식을 문자열 타입으로 변환함
NaN
undefined
는 숫자 타입으로 변환되지 않음false
console.log(1 - "1"); // 0
console.log("10" * 1); // 10
console.log(1 / "one"); // NaN
console.log(1 < "2"); // true
console.log(1 < "two"); // false
True
로, Falsy 값은 false
로 변환됨false
, undefined
, null
, 0
, NaN
, ''
if ("") console.log(1); // 실행 X
if ("str") console.log(2); // 2
if (!NaN) console.log(3); // 3
new
연산자 없이 String
생성자 함수 사용Object.prototype.toString
메소드 사용console.log(String(Infinity)); // 'Infinity'
console.log(NaN.toString()); // 'NaN'
new
연산자 없이 Number
생성자 함수 사용parseInt
, parseFloat
함수 사용console.log(Number(true)); // 1
console.log(parseFloat("1.2")); // 1.2
new
연산자 없이 Boolean
생성자 함수 사용!
두 번 사용console.log(Boolean([])); // true
console.log(!!Infinity); // true
단축 평가: 표현식을 평가하는 도중에 평가 결과가 확정되면 나머지 평가 과정을 생략하는 것
||
)/논리곱(&&
) 연산자는 논리 연산의 결과를 결정한 피연산자를 타입 변환하지 않고 반환함console.log(false || "Dog"); // 'Dog'
console.log("Cat" && false); // false
&&
로 if문을 대체할 수 있음const done = true;
let message;
if (done) message = "완료";
console.log(message); // 완료
message = done && "done";
console.log(message); // done
||
로 if문을 대체할 수 있음const done = false;
let message;
if (!done) message = "미완료";
console.log(message); // 미완료
message = done || "not done";
console.log(message); // not done
null
또는 undefined
가 아닌지 확인 후 프로퍼티를 참조할 때const obj = null;
const obj2 = { value: 1 };
console.log(obj && obj.value); // null
console.log(obj2 && obj2.value); // 1
?.
: 좌항의 피연산자가 null
또는 undefined
면 undefined
를 반환하고, 그렇지 않으면 우항의 프로퍼티 참조를 이어감const obj = null;
const obj2 = { value: 1 };
const str = "";
console.log(obj?.value); // null
console.log(obj2?.value); // 1
console.log(str?.length); // 0
??
: 좌항의 피연산자가 null
또는 undefined
면 우항의 피연산자를 반환하고, 그렇지 않으면 좌항의 피연산자를 반환함let value = null ?? "default";
console.log(value); // 'default'
value = "value" ?? "default";
console.log(value); // 'value'
value = 0 ?? "default";
console.log(value); // 0