조건부 연산자 ( 삼항연산자 )
조건부 연산자의 피연산자에는 어떤 타입도 올 수 있습니다.
첫 번재 피연산자는 불리언 값으로 평가됩니다.
첫 번째 피연산자 값이 true로 평가되면 두 번째 피연산자가 평가되고, 그 값이 반환됩니다. 만약 첫 번째 피연산자 값이 false로 평가되면 세 번재 피연산자가 평가되고, 그 값이 반환됩니다.
1 2 3 4 5 6 | function abs(x) { return x > 0 ? x : -x // 절대 값을 구함. } abs(1) // 1 abs(-1) // 1 | cs |
if문을 사용해서 비슷한 결과를 얻을 수 있지만 좀 더 편리하고 간결한 문법을 제공합니다.
1 2 3 4 5 | var userName = 'gaheeCho'; var greeting = "hello " + (userName ? userName : "there"); console.log(greeting); // 'hello gaheeCho' | cs |
1 2 3 4 5 6 7 8 9 10 11 | var userName = 'gaheeCho'; var greeting = "hello "; if(userName) { greeting += userName; } else { greeting += "there"; } console.log(greeing) // 'hello gaheeCho' | cs |
typeof 연산자
typeof 연산자는 단일 피연산자 앞에 위치하는 단항 연사자로, 피연산자에는 어떤 타입이든 올 수 있습니다.
이 연산자의 값은 피연산자의 데이터 타입을 가리키는 문자열입니다.
number, string, boolean, object, function, undefined 6가지 값을 반환할 수 있다고 합니다.
typeof의 피연산자 값이 null일 때 연산자는 "object"를 반환합니다.
만약 다른 Object들과 null을 구분하고 싶다면 typeof를 사용하기 보다 명시적으로 null인지를 테스트 해야 합니다.
typeof는 호스트 객체들에 대해서 "object"말고 다른 문자열을 반환할 수도 있습니다. 하지만 클라이언트 측 자바스크립트에 속한 대부분의 호스트 객체 타입은 "object" 입니다.
*호스트객체
브라우저와 같이 자바스크립트 인터프리터가 내장된 호스트 환경에 정의된 객체입니다.
HTMLElement 객체는 웹 페이지의 구조가 클라이언트 측 자바스크립트로 표현된 호스트 객체입니다.
호스트 객체는 호스트 환경에서 메서드들을 정의할 때 일반적으로 자바스크립트 함수 객체로 정의하는 것과 마찬가지로 네이티브 객체일 수도 있습니다.
typeof 연산자는 함수를 제외한 모든 객체와 배열을 "object"로 평가하기 때문에 객체를 다른 원시 타입과 구분하는 용도로만 사용할 수 있습니다.
자바스크립트에서 함수는 객체의 일종이지만, typeof 연산자는 함수들이 자신의 반환 값을 가지고 있다는 점 때문에 일반 객체와는 충분히 다르다고 본다고 합니다. ECMAScript 3표준에는 typeof 연산자는 모든 호출 가능 일반(native) 객체에 대해서 'function' 을 반환해야 한다고 명시되어 있습니다.
ECMAScript 5표준은 typeof 연산자가 모든 호출 가능한 객체에 대해 일반 객체든 호스트 객체든 관계없이 'function' 을 반환하도록 명세를 확장했다고 합니다. 대다수 브라우저 제작사는 호스트 객체들의 메서드로 일반 자바스크립트 함수 객체를 사용하고 있기 때문입니다.
delete 연산자
delete 는 단항 연산자이며, 피연산자로 지정된 객체 프로퍼티, 배열의 원소 또는 변수의 삭제를 시도합니다.
삭제된 프로퍼티나 배열의 원소는 단순히 undefined 값으로 설정된 것이 아니라는 점을 유념해야합니다.
어떤 프로퍼티가 삭제되면 그 프로퍼티는 더 이상 존재하지 않습니다. 그런데 존재하지 않는 프로퍼티에 접근하려고 해도 undefined가 반환되므로, 프로퍼티가 객체에 존재하는지 여부를 검사하려면 in 연산자를 써서 확인하면 됩니다.
배열의 원소를 삭제하면 배열에 빈자리가 생기고, 배열의 길이 자체는 달라지지 않습니다. 결과적으로 배열 자체가 희소배열이 됩니다.
*희소배열
배열에 속한 원소의 위치가 연속적이지 않은 배열.
delete 연산자의 피연산자는 좌변 값 입니다. 피연산자가 좌변 값이 아니면 연산자는 아무런 동작을 하지 않고 true를 반환합니다.
모든 변수나 프로퍼티를 삭제할 수는 없습니다. 몇몇 내장 코어 프로퍼티나 클라이언트 측 프로퍼티는 삭제하려고 해도 할 수 없으며, var 문으로 선언한 사용자 정의 변수들도 삭제할 수 없습니다. fucntion 문으로 정의한 함수와 함수 매개변수도 삭제할 수 없다.
ECMAScript5 엄격모드에서는 피연산자가 변수나 함수, 함수의 매개변수 등 부적합한 식별자 일 경우 SyntaxError가 발생합니다.
void 연산자
void는 단일 피연산자 앞에 쓰이는 단항 연산자로, 피연산자는 어떠한 타입도 될 수 있습니다.
이 연산자를 쓰는 목적은 좀 이례적이고 사용 빈도도 낮다고 합니다.
이 연산자는 피연산자를 무시하고 undefined를 반환합니다.
void 연산자를 사용하면 피연산자 값이 버려지기 때문에, 피연산자가 부수 효과를 갖고 있을 때만 의미가 있습니다.
1 | <a href="javascript:void window.open();">Open New Window</a> | cs |
쉼표(,) 연산자
쉼표 연산자는 이항 연산자로, 피연산자들은 어떤 타입도 될 수 있습니다. 이 연산자는 왼쪽의 전달인자를 평가하고 오른쪽의 전달인자를 평가한 후 , 오른쪽 전달인자의 값을 반환합니다.
왼편의 표현식은 항상 평가되지만 값은 무시됩니다. 따라서 쉽표 연산자는 죄측 표현식이 부수 효과를 가질 때만 의미가 있습니다.
쉼표 연산자가 보편적으로 쓰이는 유일한 지점은 for문 루프 변수 선언 부 부분이라고 합니다.
'javascript' 카테고리의 다른 글
this (0) | 2020.09.12 |
---|---|
함수 전달인자와 매개변수 (0) | 2017.04.13 |
평가 표현식 (0) | 2017.03.12 |
변수 선언 (0) | 2017.02.21 |
기본 표현식 (0) | 2016.12.22 |