[JAVA SCRIPT] 형변환, 기본 연산자와 수학

차슈·2024년 3월 28일
0

JAVA SCRIPT

목록 보기
6/24
post-thumbnail
post-custom-banner

04. 형변환

  • 형변환: 함수와 연산자에 전달되는 값은 적절한 자료형으로 자동 변환
  • alert 사용 → 전달받은 값의 자료형과 관계없이 문자열로 자동변환

문자형으로 변환

  • alert 메서드는 매개변수로 문자형을 받음
  • alert(value) 에서 value는 문자형이여야함
    • 다른 형의 값을 전달받으면 문자형으로 자동 변환
  • String(value) 함수를 호출해 전달받은 값을 문자열로 변환 가능
let value = true;
alert(typeof value); // boolean

value = String(value); // 변수 value엔 문자열 "true"가 저장됩니다.
alert(typeof value); // string

숫자형으로 변환

  • 수학과 관련된 함수와 표현식에서 자동으로 일어남
alert( "6" / "2" ); // 3, 문자열이 숫자형으로 자동변환된 후 연산이 수행됩니다.
  • Number(value) 함수를 사용하면 주어진 값(value)을 숫자형으로 명시해서 변환
let str = "123";
alert(typeof str); // string

let num = Number(str); // 문자열 "123"이 숫자 123으로 변환됩니다.

alert(typeof num); // number
  • 숫자 이외의 글자가 들어가 있는 문자열을 숫자형으로 변환 →NaN
let age = Number("임의의 문자열 123");

alert(age); // NaN, 형 변환이 실패합니다.

불린형으로 변환

  • 논리 연산 수행할때 발생
  • Boolean(value) 사용
  • 숫자, 0, 빈 문자열, null, undefined, NaN과 같이 직관적으로도 “비어있다”고 느껴지는 값들 = false
alert( Boolean(1) ); // 숫자 1(true)
alert( Boolean(0) ); // 숫자 0(false)

alert( Boolean("hello") ); // 문자열(true)
alert( Boolean("") ); // 빈 문자열(false)

💡 주의: 문자열 "0"true

05. 기본 연산자와 수학

  • 피연산자(operand) 는 연산자가 연산을 수행하는 대상
    • 5 * 2에는 왼쪽 피연산자 5와 오른쪽 피연산자 2
    • '피연산자’는 '인수(argument)'라고 불리기도 함
  • 피연산자를 하나만 받는 연산자 = 단항
    • 피연산자의 부호를 뒤집는 단항 마이너스 연산자 -
let x = 1;

x = -x;
alert( x ); // -1, 단항 마이너스 연산자는 부호를 뒤집습니다.
  • 두 개의 피연산자를 받는 연산자 = 이항
let x = 1, y = 3;
alert( y - x ); // 2, 이항 마이너스 연산자는 뺄셈을 해줍니다.

수학

  • 덧셈 연산자 +,

  • 뺄셈 연산자 -,

  • 곱셈 연산자 *,

  • 나눗셈 연산자 /,

  • 나머지 연산자 %,

  • 거듭제곱 연산자 **

나머지 연산자 (%)

  • 나머지 연산자를 사용한 표현식 a % bab로 나눈 후 그 나머지를 정수로 반환
alert( 5 % 2 ); // 5를 2로 나눈 후의 나머지인 1을 출력
alert( 8 % 3 ); // 8을 3으로 나눈 후의 나머지인 2를 출력

거듭제곱 연산자 (**)

  • 거듭제곱 연산자(exponentiation operator)를 사용한 a ** b를 평가하면 ab번 곱한 값이 반환
alert( 2 ** 2 ); // 4  (2 * 2)
alert( 2 ** 3 ); // 8  (2 * 2 * 2)
alert( 2 ** 4 ); // 16 (2 * 2 * 2 * 2)
  • 숫자에 대해서 동작
alert( 4 ** (1/2) ); // 2 (1/2 거듭제곱은 제곱근)
alert( 8 ** (1/3) ); // 2 (1/3 거듭제곱은 세제곱근)

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

  • 이항 연산자 +의 피연산자로 문자열이 전달되면 덧셈 연산자는 덧셈이 아닌 문자열을 병합
let s = "my" + "string";
alert(s); // mystring
  • 이항 연산자 +를 사용할 때는 피연산자 중 하나가 문자열이면 다른 하나도 문자열로 변환된다는 점에 주의
alert(2 + 2 + '1' ); // '221'이 아니라 '41'이 출력됩니다.
  • 뺄셈 -과 나눗셈 / 연산자의 문자형 피연산자
alert( 6 - '2' ); // 4, '2'를 숫자로 바꾼 후 연산이 진행됩니다.
alert( '6' / '2' ); // 3, 두 피연산자가 숫자로 바뀐 후 연산이 진행됩니다.

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

  • 숫자에 단항 덧셈 연산자를 붙이면 아무런 동작도 하지 않음
  • 피연산자가 숫자가 아닌 경우 ⇒ 숫자형으로의 변환이 일어남
// 숫자에는 아무런 영향을 미치지 않습니다.
let x = 1;
alert( +x ); // 1

let y = -2;
alert( +y ); // -2

// 숫자형이 아닌 피연산자는 숫자형으로 변화합니다.
alert( +true ); // 1
alert( +"" );   // 0

증가,감소 연산자

  • 증가(increment) 연산자 ++는 변수를 1 증가
let counter = 2;
counter++;      // counter = counter + 1과 동일하게 동작합니다. 하지만 식은 더 짧습니다.
alert( counter ); // 3
  • 감소(decrement) 연산자 --는 변수를 1 감소
let counter = 2;
counter--;      // counter = counter - 1과 동일하게 동작합니다. 하지만 식은 더 짧습니다.
alert( counter ); // 1
  • 변수에만 사용 가능

counter++와 같이 피연산자 뒤에 올 때는, '후위형(postfix form)'이라고 부릅니다.

++counter와 같이 피연산자 앞에 올 때는, '전위형(prefix form)'이라고 부릅니다.

let counter = 1;
let a = ++counter; // (*)

alert(a); // 2
let counter = 1;
let a = counter++; // (*) ++counter를 counter++로 바꿈

alert(a); // 1
  • 반환 값을 사용하지 않는 경우라면, 전위형과 후위형엔 차이가 없음
    let counter = 0;
    counter++;
    ++counter;
    alert( counter ); // 2, 위 두 라인은 동일한 연산을 수행합니다.
    • 값을 증가시킨 후 증가한 값을 바로 사용 → 전위형 증가 연산자

      let counter = 0;
      alert( ++counter ); // 1
    • 값을 증가 시키지만 증가 전의 기존값을 사용 → 후위형 증가 연산자

      let counter = 0;
      alert( counter++ ); // 0

비트 연산자

  • 비트 AND ( & )
  • 비트 OR ( | )
  • 비트 XOR ( ^ )
  • 비트 NOT ( ~ )
  • 왼쪽 시프트(LEFT SHIFT) ( << )
  • 오른쪽 시프트(RIGHT SHIFT) ( >> )
  • 부호 없는 오른쪽 시프트(ZERO-FILL RIGHT SHIFT) ( >>> )

논리 연산자

자바스크립트엔 세 종류의 논리 연산자 ||(OR), &&(AND), !(NOT)이 존재

  • || (OR)
    alert( true || true );   // true
    alert( false || true );  // true
    alert( true || false );  // true
    alert( false || false ); // false
    • 피연산자가 모두 false인 경우를 제외하고 연산 결과는 항상 true
    • ||if문에서 자주 사용됨. 주어진 조건 중 하나라도 인지를 테스트하는 용도
post-custom-banner

0개의 댓글