Javascript, 기타 연산자

< 기타 연산자 >

[wptb id=2316]

[1] typeof 연산자

  • 단항 연산자
  • 피연산자의 데이터 타입을 뜻하는 문자열을 반환
var s = "ABC";
console.log(typeof.s); // → "string"

< typeof 연산자의 반환값 >

[wptb id=2318]

객체의 유형을 조사할 때는 instanceof 연산자와 객체의 constructor 프로퍼티를 사용

[2] 조건 연산자

삼항 연산자

주어진 조건의 참과 거짓에 따라 값을 선택

var parity = (a % 2 == 0)? "짝수" : "홀수";
[wptb id=2321]

이 코드에서 우변 값이 a % 2가 0일 때 “짝수”가 되고, 그렇지 않으면 “홀수”가 된다.

1항에서 피연산자를 조건식으로 평가하여 그 결과가 true 면 2항을 피연산자의 값으로 삼고, false면 3항의 피연산자를 값으로 삼는다.

이러한 처리는 if/else 문을 사용해서 작성할 수도 있다.

if (a % 2 == 0) {
    parity = "짝수";
} else {
    parity = "홀수";
}

[3] 쉼표 연산자

이항 연산자

왼쪽 피연산자를 평가하고 오른쪽 피연산자를 평가한 이후에 마지막으로 오른쪽 끝 피연산자의 값을 반환. 이를 활용하면 여러 문장을 한 문장으로 표현할 수 있다.

i = 0, sum = 0, product = 1;

이 표현식의 결과값은 마지막 피연산자를 평가한 값인 1인 된다.

쉼표 연산자는 for 문에서 자주 사용된다.

for (var i = 1, sum = 0, i <= 10, i++) {
    sum += 1;
}

[4] eval 함수

연산자는 아니며 함수, 하지만 연산자의 역할을 담당하고 있다.

문자열 단 하나만을 인수로 받아서 자바스크립트 코드로 해석

문자열을 해석할 때는 코드를 평가한 후에 마지막 표현식 또는 문장의 값을 반환

문자열을 해석할 수 없다면 문법 오류가 발생한다.

eval 함수를 실행하면 eval 함수를 호출한 환경의 유효 범위 안에 있는 변수를 사용한다. 일반적인 함수처럼 함수 유효 범위를 만들지 않는다.

var x = 1;
eva l("x++;");

이 코드는 다음과 같다.

var x = 1;
x++;
var formular = "x*x";
eva l("fuction f(x) { return " + formula + "; }" );

이 코드는 다음과 같다.

function f(x) { return x*x; };

eval 함수를 남용해서는 안된다.

  • 사용자가 악의적으로 입력한 문자열을 eval 함수에 인수로 넘기면 악성 코드가 실행되어 보안 문제가 발생할 수 있다.
  • eval 함수로 실행한 코드는 속도가 느리다. 그래서 다른 대안이 있다면 그쪽을 이용하는 편이 빠르고 안전하다.

[5] void 연산자

  • void는 값을 생성하는 표현식을 평가해서 undefined를 반환
  • 오직 undefined 원시값을 얻기 위해 void 0, void(0) 처럼 사용하는 경우도 있는데, 이런 경우 전역 undefined를 대신 사용해도 된다.
console.log(void 1); // → undefined

void 연산자의 우선 순위도 유념해야 한다. 그룹 연산자(괄호)를 사용하면 void 연산자를 사용한 식의 평가 과정을 더 명확하게 보일 수 있다.

console.log(void 2 == '2'); // false

이 코드의 해석 과정은 다음과 같다.

  1. void 2가 undefined로 반환
  2. undefined == ‘2’ 를 평가한 뒤 false로 반환
console.log(void (2 == '2')); // → undefined

이 코드의 해석 과정은 다음과 같다.

  1. 2 == ‘2’ 가 평가된 뒤 true로 반환
  2. void true는 undefined를 반환

[6] instanceof 연산자

  • 객체의 종류를 확인
  • 객체의 원시값에 존재하는지 판별
var simpleStr = "This is a simple string";
var myString = new String();
var newStr = new String("String created with constructor");
var myDate = new Date();
var myObj = {};

console.log(simpleStr instanceof String); // → false
console.log(myString instanceof String);  // → true
console.log(newStr instanceof String);    // → true
console.log(myString instanceof Object);  // → true
console.log(myObj instanceof Object);     // → true
console.log( ({}) instanceof Object);     // → true
console.log(myString instanceof Date);    // → false
console.log(myDate instanceof Date);      // → true
console.log(myDate instanceof Object);    // → true
console.log(myDate instanceof String);    // → false
function Car(make, model, year) {
    this.make = make;
    this.model = model;
    this.year = year;
}
var mycar = new Car("Hyndai", "Grandeur", "2022");
var a = mycar instanceof Car;
var b = mycar instanceof Object;

console.log(a); // → true
console.log(b); // → true

< 참고문헌 >
🔹주 참고문헌 : 모던 자바스크립트 입문 – 이소 히로시 지음, 서재원 옮김
🔹MDN Web Docs

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다


error: 컨텐츠가 보호되고 있습니다.
위로 스크롤