티스토리 뷰

2.7 Type conversions

String Conversion

String 변환은 String(value)으로 할 수 있음.

 

Numeric Conversion

Number("123") 방식으로 변환이 가능하다. true는 1로 false는 0으로 변환된다.

alert( Number("   123   ") ); // 123
alert( Number("123z") );      // NaN (error reading a number at "z")
alert( Number(true) );        // 1
alert( Number(false) );       // 0

Boolean Conversion

alert( Boolean(1) ); // true
alert( Boolean(0) ); // false

alert( Boolean("hello") ); // true
alert( Boolean("") ); // false

 

"0"을 boolean 타입으로 변환했을 때는 number 타입과 달리 true로 변환되는 것을 기억하자.

 

2.8 Basic operators, maths

대부분 Java에서의 연산자와 비슷하다. 연산자 우선순위 표는 기억해 두는 것이 좋겠다. 

 

"=" 연산의 경우 아래 방식으로도 쓰일 수 있다.

let a = 1;
let b = 2;

let c = 3 - (a = b + 1);

alert( a ); // 3
alert( c ); // 0

 

콤마 연산의 경우 좀 특이했는데, 콤마 앞의 첫 번째 연산이 무시되고 뒤에 나오는 연산이 반환된다. 잘 쓰이지는 않는다고 한다.

let a = (1 + 2, 3 + 4);
alert( a ); // 7 (the result of 3 + 4)

 

2.9 Comparison

대부분 Java와 비슷한데, 다른 유형 간에 비교를 할 때는 결괏값을 숫자로 변환해서 반환한다.

alert( '2' > 1 ); // true, string '2' becomes a number 2
alert( '01' == 1 ); // true, string '01' becomes a number 1

 

boolean의 경우 true, false로 반환한다. 다소 특이한 케이스로는, 앞서 0과 "0"을 boolean 타입으로 변환했을 때 각각 다른 결과를 반환했는데 둘을 동등비교를 하면 true를 반환한다.

let a = 0;
alert( Boolean(a) ); // false

let b = "0";
alert( Boolean(b) ); // true

alert(a == b); // true!

 

Strict equality

'==' 연산자의 경우 타입이 달라도 true 반환하는 경우가 있다. == 연산자를 통해 타입이 변환되면서 비교하기 때문인데, 

alert( 0 == false ); // true
alert( '' == false ); // true

'===' 엄격한 비교 연산자는 타입 변환을 하지 않고 바로 결과를 반환한다.

alert( 0 === false ); // false, because the types are different

 

 

 

그 외 특이한 케이스들..

alert( null === undefined ); // false
alert( null == undefined ); // true

 

null은 0보다 크거나 같다로 명시한다.

alert( null > 0 );  // (1) false
alert( null == 0 ); // (2) false
alert( null >= 0 ); // (3) true
alert( undefined > 0 ); // false (1)
alert( undefined < 0 ); // false (2)
alert( undefined == 0 ); // false (3)

 

(1), (2)의 경우 undefined로 변환하면 NaN 이기 때문에 false를 반환한다.

(3)의 경우 undefined == null 비교는 true를 반환하기 때문에, undefined를 0과 비교할 때에는 사실상 null과 비교하는 것과 같다. 따라서, false를 반환한다.

 

null / undefined 비교를 잘 기억하고 해당 값이 나올 수 있는 변수의 경우 비교할 때 주의해야할 것 같다. 아마 validation을 먼저 한 뒤 비교를 하게 되지 않을까?

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday