< 기타 연산자 >
[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
이 코드의 해석 과정은 다음과 같다.
- void 2가 undefined로 반환
- undefined == ‘2’ 를 평가한 뒤 false로 반환
console.log(void (2 == '2')); // → undefined
이 코드의 해석 과정은 다음과 같다.
- 2 == ‘2’ 가 평가된 뒤 true로 반환
- 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


