기본 연산자와 수학

Yeom Jae Seon·2021년 2월 20일
0

JavaScript

목록 보기
4/6
post-thumbnail

거듭제곱 연산자 **

  • **연산자를 이용하면 거듭제곱을 할수 있다.
    2 ** 4 // 2^4, 16
  • 정수가 아닌 number에 대해서도 적용됨
    2 ** (1 / 2) // 2^(1/2), 1.4142135623730951

이항연산자 '+'와 문자열 연결

  • 이항연산자란 피연산자가 2개인 연산자를 말한다. ex) a + b
  • '+'는 무언가를 더하는 연산자 같지만 이항 연산자 '+'의 피연산자로 String이 전달되면 더해지는게 아니라 문자열이 병합된다.
10 + '1' // '101'
  • 저번에 했던 형변환중 숫자형으로 변환에서 수학 연산과 관련된 인자로 문자가 들어가면 숫자형으로 자동 형변환된다 하였는데 '+'는 예외이다.
10 + '2' // '102'
10 - '2' // 8
10 / '2' // 5
  • '+'가 아닌 다른 연산자들에 대해선 '2'인 String이 저절로 Number로 형변환되어 연산이 되지만 '+'의 피연산자인 '2' - String은 Number로 형변환 되지 않고 다른 피연산자인 Number인 10이 String '10'으로 문자형 형변환되어 문자형끼리 병합되는 걸 볼수가 있다.
  • 첫번째 피연산자가 String인지 두번째 피연산자가 String인지는 중요하지 않고 어느 하나가 String이면 나머지도 String으로 형변환되어 String끼리 병합된다.
'2'+10 // '210'
  • '+'는 숫자끼리 더하기 뿐만 아니라 문자열 끼리 병합이라는 특별한 기능을 제공한다.

단항연산자 '+'와 숫자형으로의 변환

  • 숫자형으로 변환되는 방법으론 저번에 했던 Number(value)함수를 통해서 변환이 가능한걸 알고 있다.
  • 단항연산자로써 '+'는 숫자형으로 형변환 역할을 한다.
+'1001' // 1001
+'안뇽' // NaN
+true // 1
+'' // 0
  • 좀 더 복잡한 예시에서 이를 응용할수 있다.
const value1 = '2'
const value2 = '3'

alert(+value1 + +value2) // 5
  • 위 예시에서 단항연산자 '+'로 Number로 형변환을 둘다 시키지않고 둘중 하나만 시켰으면 결과는 문자열 병합이 되었겠다.

쉼표 연산자

  • 특이한 연산자이고 좀처럼 보기도 힘든 연산자이지만 잘몰랐기 때문에 알아보자.
  • 코드를 짧게 쓰려는 의도로 가끔 사용된다.
  • ','는 여러 표현식을 코드 한줄에서 평가할수 있게 해준다.
  • ','는 마지막 표현식의 평가 결과만 반환되게 한다.
const a = (1 + 2, 3 + 4); 

alert(a) // 7

const vrict = (3, 4, 5, 6, 7, 8, 9, 10)
alert(vrict) // 10
  • 즉 마지막 표현식을 제외한 앞의 모든 표현식을 버려버리는 연산자이다.
for(a = 1, b = 3, c = a * b; a < 10; a++){
...
}
  • 이런 방법으로 앞의 표현식을 버리고 마지막 표현식만 살려서 코드를 좀더 간결하게 작성할수 있게 도와준다.
  • 쉼표연산자는 코드를 간결하게 작성하게 도와주지만 코드의 가독성은 좋지 못하다. 그래도 여러 자바스크립트 프레임워크에서 볼수 있으므로 알아두자.

과제 1

let a = 1, b = 1;

let c = ++a; // ?
let d = b++; // ?

// 답
// a : 2
// b : 2
// c : 2
// d : 1
  • 위에서 따로 얘기는 안했지만 '++'가 앞에 붙으면 증가된 값을 반환하고 뒤에 붙으면 증가히기전 값을 반환한다. 바로 반환하는게 아니면 둘의 차이는 없다.

과제 2

let a = 2;

let x = 1 + (a *= 2);

// 답
// a : 4
// x : 5

과제 3

"" + 1 + 0
"" - 1 + 0
true + false
6 / "3"
"2" * "3"
4 + 5 + "px"
"$" + 4 + 5
"4" - 2
"4px" - 2
7 / 0
"  -9  " + 5
"  -9  " - 5
null + 1
undefined + 1
" \t \n" - 2

// 답
// "10" (String) - 이항연산자 +는 문자열 병합으로 사용됨.  그러므로 "" + 0의 결과는 "0"이된다. 문자열끼리 병합되는 것이므로. 빈문자열에 "0"을 병합하는 것이다. 후의 연산도 동일하다.
// -1 (Number) - ''는 숫자형으로 형변환되어 0이된다. 그후 나머지 연산
// 1 (Number) - 문자열이 아니고 불리언이다. 불리언에 대한 +는 Number로 형변환되어 더해진다.
// 2 (Number) - 문자열 "3"은 Number로 변환되어 계산됨
// 6 (Number) - 문자열 2와 3은 Number로 변환되어 계산됨. + 빼곤 전부 숫자형으로 변환된다고 생각하자
// "9px" (String) - 좌측부터 연산시작되고 4 + 5는 9이고 9 + "px"는 문자열병합으로 "9px"
// "$45" (String) - 문자열병합
// 2 (Number) - "4"는 숫자형변환후 계산
// NaN (Number) - -이므로 피연산자가 숫자형으로 변환되어야하는데 "4px"을 숫자형변환하면 NaN이다.
// Infinity (Number) - 7 / 0은 Infinity 즉, Number이다.
// "  -9  5" (String) - 살짝 헷갈렸지만 +는 문자열병합이므로 뒤의 Number인 5를 문자열로 변환하고 병합하면 끝
// -14 (Number) - -이므로 숫자형으로 변환뒤 계산
// 1 (Number) - null은 숫자형으로 변환하면 0
// NaN (Number) - undefined을 숫자형으로 변환하면 NaN (null과 다름에 주의)
// -2 (Number) - -이므로 숫자형으로 변환되어야 하는데 \t와 \n 공백으로 구성되므로 숫자형으로 변환하면 0 이 된다. 즉, " \t \n"을 숫자형으로 변환하면 Number("")이므로 0이다.

과제 3

let a = prompt("덧셈할 첫 번째 숫자를 입력해주세요.", 1);
let b = prompt("덧셈할 두 번째 숫자를 입력해주세요.", 2);

alert(a + b); // 12


// 답
// alert(+a + +b);
  • prompt의 결과는 String이므로 '+'의 피연산자로 String이 있으면 문자열 병합이일어나서 "12"가 출력되었다.
  • 이를막으려며 둘다 Number로 형변환해줘야한다.
  • '+'단항연산자를 통해서 형변환 해주었다.

0개의 댓글