연산자
피연산자
표현식
- 이항 산술 연산자 : 2개의 피연산자를 산술 연산
: 2개의 피연산자를 산술 연산
: 피연산자의 값을 변경하는 부수 효과가 없다
+, -, *, /, %
: 1개의 피연산자를 산술 연산하여 숫자 값을 만든다
++ : 증가, --: 감소 [암묵적 할당이 이뤄진다]
- 전위 증가/감소 연산자 : 피연산자의 증가/감소 후 다른 연산 수행
- 후위 증가/감소 연산자 : 다른 연산을 수행한 후 피연산자의 값을 증가/감소
- : 효과 X , - : 양수를 음수로, 음수를 양수로
- : 숫자 타입이 아닌 피연산자에 사용하면 숫자 타입으로 변환
- : 피연산자의 부호를 반전한 값, 숫자 타입이 아닌 피연산자를 숫자 타입으로 변환하여 반환
: 우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당한다
: 좌항의 변수에 값을 할당하므로 변수 값이 변하는 부수 효과가 있다
표현식은 값으로 평가될 수 있는 문
문
할당문은 변수에 값을 할당하는 부수 효과만 있을 뿐, 값으로 평가되지 않을 것처럼 보인다
하지만 값으로 평가되는 표현식인 문으로서 할당된 값으로 평가된다
그러므로 할당문을 다른 변수에 할당할 수 있다
이런 특징을 이용해 여러 변수에 동일한 값을 연쇄 할당할 수 있다
var x;
consle.log(x=10); //10
var a,b,c;
a = b = c = 0; //c부터 할당이 된다
console.log(a,b,c)//0 0 0
: 좌항과 우항의 피연산자를 비교한 다음 그 결과를 불리언 값으로 반환
: if, for문과 같은 제어문의 조건식에서 주로 사용
: 좌항과 우항의 피연산자가 같은 값으로 평가되는지 비교해 불리언 값을 반환
: 비교하는 엄격성의 정도가 다르다
- 동등 비교
- 느슨한 비교
- 암묵적 변환을 통해 타입을 일치 시킨 후 같은 값인지 비교!
- 예측하기 어려운 결과, 비추천
- 일치 비교
- 엄격한 비교
- 타입, 값 모두 같아야 true
- NaN을 주의해야 한다
cf. NaN : 자신과 일치하지 않는 유일한 값
Number.isNaN을 사용해서 숫자가 NaN인지 아닌지 조사한다
cf. +0, -0: 두 비교 다 true
cf. Object.is 메서드
: 예측 가능한 정확한 비교 결과 반환
: 그 외에는 일치 비교 연산자와 동일하게 동작
부수효과가 없다
: 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 크면 참을 반환함.
= : 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 크거나 같으면 참을 반환함.
: 조건식의 평가 결과에 따라 반환할 값을 결정한다
조건식 ? 조건식이 true일 때 반환할 값 : 조건식이 false일 때 반환할 값
var result = score >= 60 ? 'pass' : 'fail';
? 앞의 첫번째 피연산자 : 조건식, 불리언 타입의 값으로 평가될 표현식
- 불리언 값이 아니면 불리언 값으로 암묵적 타입 변환
첫번째 피연산자가 true로 평가되면 두 번째 피연산자를 반환하고
첫번째 피연산자가 false로 평가되면 세 번째 피연산자를 반환한다
if문과 중요한 차이 : 삼항 조건 연산자 표현식은 if문과 달리 값처럼 사용할 수 있다! - 즉 삼항 조건 연산자 표현식은 값으로 평가할 수 있는 표현식인 문!
조건에 따라 어떤 값을 결정할 때 : 삼항 조건 연산자
조건에 따라 수행해야 할 문이 여러 개 : if...else문
우항과 좌항의 피연산자(부정 논리 연산자의 경우 우항의 피연산자(를 논리 연산한다
&& 논리식이 모두 참이면 참을 반환함. (AND 연산)
|| 논리식 중에서 하나라도 참이면 참을 반환함. (OR 연산)
- 평과 결과가 불리언 값이 아닐 수 있다
- 두 개의 피연산자 중 어느 한쪽로 평가된다 (곱이면 뒤, 식이면 앞)
ex. 'Cat' && 'Dog' // 'Dog'
! 논리식의 결과가 참이면 거짓을, 거짓이면 참을 반환함. (NOT 연산)
- 언제나 불리언 값을 반환
- 피연산자가 불리언 값을 필요 X (암묵적 타입 변환)
- ex. !0 //true, !'Hello!'//false
cf. 드 모르간의 법칙
!(x || y) === (!x && !y)
!(x && y) === (!x || !y)
var x,y,z;
x=1, y=2, z=3; //3
소괄호로 피연산자를 감싼다
자신의 피연산자인 표현식을 가장 먼저 평가한다
-> 연산자의 우선 순위를 조절할 수 있다 : 그룹 연산자가 연산자 우선순위가 가장 높다
10*2 + 3;
10 * (2+3);//그룹이 먼저 계산됨
: 피연산자의 데이터 타입을 문자열로 반환한다
: "string", "number", "boolean", "undefined", "symbol", "object", "function"(함수)
: "null"은 반환 X
ex. typeof NaN // "number"
ex. typeof Symbol() //"symbol"
ex. typeof null // "object"
ex. typeof new Date()//"object"
ex. typeof /test/gi //"object"
cf. null타입인지 확인할 때는 일치 연산자 사용하기
cf. 선언하지 않은 식별자를 typeof 연산자로 연산해보면 ReferenceError가 발생하지 않고 undefined를 반환한다
//추후 다른 페이지에서 자세히 다룸
부수효과란?
다른 코드에 영향을 주는 것
부수 효과가 있는 연산자
: 할당 연산자, 증가/감소 연산자, delete 연산자
: 여러 개의 연산자로 이뤄진 문이 실행될 때 연산자가 실행되는 순서
: 높을수록 먼저 실행된다
어느 쪽(좌 / 우)부터 평가를 수행할 것인지를 나타내는 순서