language/javaScript

2. JS 핵심 - 연산자

wooweee 2023. 4. 18. 20:08
728x90

1. 연산자

 

규칙

  1. + : 문자열을 합치는 역할도 수행한다. 그래서 우선 순위가 문자열 합하기, 산술계산(type이 number일 때만)
  2. - : 산술계산에서만 사용. 그래서 모든 type을 number로 자동 형변환하는데 이때 number로 변환이 안되는 수는 NaN 반환
  3. **: 제곱
  4. JS는 문자열을 중요시하기 때문에 정렬관련된 부분들은 다 사전 순서이다.
  5. 비교
    • < , > 같은 일반적인 비교 연산자는 자동형변환을 하지 않는다.
    • == : 비교연산자는 자동형변환을 해준다.
    • !=  : 이것도 가능
    • === : 얘는 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. 연산자 == 와 ===

  1. == 자동 형변환 후 값 비교
  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, 형변환