[JS] 연산자

heyhey·2023년 2월 20일
0

JavaScript

목록 보기
5/14

[2.7,2.8,2.9,2.10,2.11,2.12]
연산자에 들어가기 앞서 형변환을 먼저 알아보자

형변환


함수와 연산자에 전달되는 값은 자동으로 적절한 자료형으로 변환된다.(자동 형변환)
이 외에 값을 의도를 갖고 원하는 타입으로 변환해주는 것을 명시적 형 변환이라고 한다.

문자형으로 변환

String(value) 형태로 사용

a = true
typeof a => boolean 
b = String(a)
typeof b => string

숫자형으로 변환

Number(value) 형태로 사용

Number("123") => 123
숫자 이외의 글자를 숫자형으로 변환하려고 하면 결과는 NaN이 된다.

Number(undefined) => NaN
Number(null) => 0
Number(true/false) => 1/0
Number("") => 0

불린형으로 변환

논리 연산을 수행할 때 발생한다.
직관적으로 비어있다고 느껴지는 값들은 false가 된다.

  • 숫자 0
  • 빈문자열
  • null
  • undefined
  • NaN
  • 주의) "0"=>true, " " => true

기본 연산자


  • 덧셈 연산자 +
  • 뺄셈 연산자 -
  • 곱셈 연산자 *
  • 나눗셈 연산자 /
  • 나머지 연산자 %
  • 거듭제곱 연산자 **

+,-

  • = 문자열이 전달되면 문자열을 연결시킨다.
  • = 뺄샘은 자동적으로 숫자로 변형한 뒤 진행한다.
    +는 Number() 와 동일한 일을 한다.

    "1" + "2" => "12"
    5+'2' => 52
    5-'2' => 3
    2+2+'1' => 41
    +true => 1
    -true => -1

쉼표 연산자


let a = (1+2,3+4)
a => 7

이게 무슨 의미일까... ?
이거는 사실 코드를 짧게 쓰는 방법 중이 하나다.
표현식 각각은 모두 평가되지만, 마지막 표현식의 결과만 반환된다는 점이 특이하다.
이 기능을 언제 사용할까?

for(a=1,b=3,c=a*b;a<10;a++){
  ...
}

이런식으로 사용하면 된다.
하지만 가독성이 좋지 않기 때문에 크게 추천하진 않는다.

비교 연산자


  • > < != == 등을 사용하면, 불린형으로 반환한다.

  • 문자열을 비교하면, 사전 순으로 문자를 비교한다. 즉 사전의 앞쪽에 있다면 더 작은 것이다.
    'Z' > 'A' => true

  • 서로 자료형이 다르다면, js는 이 값들을 숫자로 바꿔서 계산한다.
    '01' == 1 => true

  • true 는 1 , false는 0으로 변환된다.

일치 연산자


== 동등 연산자는 0과 false를 구분하지 못한다.
=> 피연산자를 숫자형으로 바꾸기 때문에 발생한다.

=== 일치 연산자를 사용하면, 엄격하게 동등 여부를 판단한다.

null

지금부터 머리 아파집니다~
null == undefined => true

null > 0 => false
null == 0 => false
null >= 0 => true

?? 이러한 이유가 나타나는 이유는 동작방식이 달라서 그렇다
null이 숫자로 변환되어 0이 되기때문에 세번째는 맞다고 표시된다.

undefined

undefined > 0 => false
undefined < 0 => false
undefined == 0 => false

조건부 연산자 (?)


let accessAllowed = (age > 18) ? true : false;

물을표 연산자는 조건에 따라 값을 달리하려는 목적으로 만들어졌으나,
여러줄로 나눠져 if else 로 적힌 코드가 더 읽기 좋을 수 있다.
여러 분기를 만들어 처리를 할때는 if를 이용하는 것이 더 보기좋다.

논리 연산자


js에는 세가지의 논리 연산자가 존재한다.
&& AND
|| OR
! NOT

||

여러개를 chaining 해서 사용한다면 처음 나오는 truthy가 반환되고 존재하지 않는다면 마지막 피연산자를 반환한다.
a,b가 없고 c가 있기 때문에 c를 반환한다

let a = ""
let b = ""
let c = "hi"
let d = a || b || c || "bye"
d => "hi"

&&

AND는 첫번째 falsy를 반환한다
1 && 0 => 0
1 && 2 && null && 3 => null
1 && 2 && 3 => 3

!

NOT을 두개 연달아 사용하면 불린형으로 사용할 수 있다.
!![].length => false

nullish 병합 연산자 (??)

최근에 추가된 문법이다.
a ?? b
=> a가 null 도 아니고 undefined 도 아니라면 a
=> 그 이외에는 b

|| 와 비슷해 보인다. 결과도 사실 똑같지만 아래의 차이가 있다.

  • ||는 첫 번째 truthy 값을 반환한다
  • ??는 첫 번째 정의된(defined) 값을 반환한다.
profile
주경야독

0개의 댓글