728x90
1. 연산자
규칙
- + : 문자열을 합치는 역할도 수행한다. 그래서 우선 순위가 문자열 합하기, 산술계산(type이 number일 때만)
- - : 산술계산에서만 사용. 그래서 모든 type을 number로 자동 형변환하는데 이때 number로 변환이 안되는 수는 NaN 반환
- **: 제곱
- JS는 문자열을 중요시하기 때문에 정렬관련된 부분들은 다 사전 순서이다.
- 비교
- < , > 같은 일반적인 비교 연산자는 자동형변환을 하지 않는다.
- == : 비교연산자는 자동형변환을 해준다.
- != : 이것도 가능
- === : 얘는 type 비교도 해주는 거여서 형변환 안됨
// 연산자
let a = 7 + "5"; // +는 string 합을 나타내는 연산자로 사용될 수 있어서 string 형식 합
console.log(a); // 75
let b = 7 - "5"; // -는 산술 연산에만 존재하므로 type을 number로 바꿔줄 수 있다.
console.log(b); // 2
console.log(typeof b); // number
//
let c = 10 ** 3;
console.log(c); // 1000
let d = 0.1 * 10;
console.log(d); // 1.0 아님
"2" > "12"; // true. 사전 순서상 2가 뒤에 존재
console.log("2" > "12");
"2" > 12; // false
console.log("2" > 12); // false -> "2"는 숫자가 아니므로 NaN으로 변환
// NaN은 어떤 숫자와 비교해도 false를 반환
1 == "1"; // true
console.log(1 == "1"); // type 비교(==연산자일 때) 시 자동 형변환 cf) ===은 type 비교를 해야되므로 변경 안됨.
console.log(1 != "23"); // true
undefined == 0; // type도 모르는 값과 0 비교 false
undefined == null; // type도 모르는 것의 값과 null의 값 true
undefined === null; // type도 모르는 것과 참조변수 빈값 false
console.log(typeof null); // object
console.log(typeof undefined); // undefined
2. 연산자 == 와 ===
- == 자동 형변환 후 값 비교
- === 타입과 값 비교 - 수동형변환을 해야한다. 권장하는 비교 연산자
- 리터럴
- 기본형은 해당 메모리 주소가 존재하지만 실제 값으로 나옴
- 참조형은 객체 주소가 값으로 저장되어 있다.
// == 과 === -> equals 와 ==
let num = 123;
let num1 = 123;
let num2 = new Number(123);
let num3 = "123";
console.log(typeof num); // number - 주소값을 통해서 123을 가져오지만 java의 기본형처럼 생각하기
console.log(typeof num2); // object - java의 객체와 동일
console.log(num == num2); // true
console.log(num === num2); // false
console.log(num == num1); // true
console.log(num === num1); // true
console.log(num == num3); // true
console.log(num === num3); // false
let str1 = "abc"; // 문자열 literal으로 인식
let str2 = new String("abc");
let str3 = new String("abc");
console.log(typeof str1); //string
console.log(typeof str2); //object
console.log(typeof str3); //object
console.log(str1 == str2); //true -문자리터럴과 객체비교시 객체가 valueof()로 변경된다.
console.log(str1 === str2); // false
console.log(str2 == str3); // false - 객체 주소값 비교
console.log(str1 === str2); // false - type 비교 + 객체 주소값 비교
console.log(str2.valueOf() == str3.valueOf()); // true . 객체의 값을 비교하고 싶은 경우
console.log(typeof str2.valueOf()); // string
// == 타입을 동일하게 변경 후 비교. 기본형은 값으로 비교, object는 객체 주소로 비교
// === 타입을 비교 그리고 값도 비교
let str = new String("123");
let num = new Number(123);
console.log(str === num); // false
console.log(num instanceof Number); // true
console.log(num instanceof String); // false
3. toExponential(), toFixed(), toPrecision()
- 모두 결과가 문자열 반환된다.
let x = 9.656;
x.toExponential(2);
console.log(x.toExponential(2)); // 9.66e+0
console.log(x.toFixed(2)); // 9.66
console.log(x.toPrecision(3)); // 9.66
이전 발행글 : 1.JS 핵심 - window, dom, type, hoisting, scope, let, const, 형변환