forked from qwer0114/Javascript-Deep-Dive-Study
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1 from qwer0114/main
aa
- Loading branch information
Showing
39 changed files
with
5,119 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,194 @@ | ||
## 07장_연산자 | ||
|
||
### 연산자란 | ||
하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입, 지수 연산을 수행해 하나의 값을 만듦 | ||
|
||
>피연산자가 “값”이라는 명사의 역할을 한다면 연산자는 “값을 만든다”라는 동사의 역할 | ||
``` javascript | ||
//산술 연산자 | ||
5*4 = 20 | ||
|
||
//문자열 연결 연산자 | ||
'My name is ' + 'Lee' // 'My Name is Lee' | ||
|
||
// 할당 연산자 | ||
color = 'red' // red | ||
|
||
|
||
// 비교 연산자 | ||
3 > 5 | ||
|
||
// 논리 연산자 | ||
true && false | ||
|
||
// 타입 연산자 | ||
typeof 'Hi' | ||
|
||
``` | ||
|
||
|
||
|
||
### 산술 연산자 | ||
#### 단항 산술 연산자(증/감) | ||
|
||
단항 산술 연산자의 증가(++)/감소(--) 연산자는 피연산자의 값을 변경하는 부수 효과가 있다. | ||
|
||
부수효과를 다시 설명하자면 증가/감소 연산을 하면 피연산자의 값이 바뀐다는 것으로 해석이 가능하다. | ||
|
||
```javascript | ||
var x = 5, result; | ||
|
||
// 선할당 후증가 (Postfix increment operator) | ||
result = x++; | ||
console.log(result, x); // 5 6 | ||
|
||
// 선증가 후할당 (Prefix increment operator) | ||
result = ++x; | ||
console.log(result, x); // 7 7 | ||
|
||
// 선할당 후감소 (Postfix decrement operator) | ||
result = x--; | ||
console.log(result, x); // 7 6 | ||
|
||
// 선감소 후할당 (Prefix decrement operator) | ||
result = --x; | ||
console.log(result, x); // 5 5 | ||
|
||
``` | ||
|
||
숫자 타입이 아닌 피연산자에 사용하면 피연산자를 숫자 타입으로 변환하여 반환한다. | ||
|
||
```javascript | ||
// 부호를 반전한다. | ||
-(-10); // -> 10 | ||
|
||
// 문자열을 숫자로 타입 변환한다. | ||
-'10'; // -> -10 | ||
|
||
// 불리언 값을 숫자로 타입 변환한다. | ||
-true; // -> -1 | ||
|
||
// 문자열은 숫자로 타입 변환할 수 없으므로 NaN을 반환한다. | ||
-'Hello'; // -> NaN | ||
``` | ||
#### 문자열 연결 연산자 | ||
|
||
+연산자는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작한다. | ||
|
||
```javascript | ||
// 문자열 연결 연산자 | ||
'1' + 2; // -> '12' | ||
1 + '2'; // -> '12' | ||
|
||
// true는 1로 타입 변환된다. | ||
1 + true; // -> 2 | ||
|
||
// false는 0으로 타입 변환된다. | ||
1 + false; // -> 1 | ||
|
||
// null은 0으로 타입 변환된다. | ||
1 + null; // -> 1 | ||
|
||
// undefined는 숫자로 타입 변환되지 않는다. | ||
+undefined; // -> NaN | ||
1 + undefined; // -> NaN | ||
``` | ||
|
||
|
||
### 동등비교와 일치비교 | ||
동등비교는 타입 검사부터 진행 다르면 암묵적 타입변환 후 일치비교와 동일한 검사 수행 -> 결과 예측 어려움 | ||
|
||
```javascript | ||
// 동등 비교. 결과를 예측하기 어렵다. | ||
'0' == ''; // -> false | ||
0 == ''; // -> true | ||
0 == '0'; // -> true | ||
false == 'false'; // -> false | ||
false == '0'; // -> true | ||
false == null; // -> false | ||
false == undefined; // -> false | ||
|
||
|
||
// 즉, 값과 타입이 모두 같은 경우만 true를 반환한다. | ||
5 === '5'; // -> false | ||
|
||
// NaN은 자신과 일치하지 않는 유일한 값이다. | ||
NaN === NaN; // -> false | ||
|
||
// Number.isNaN 함수는 지정한 값이 NaN인지 확인하고 그 결과를 불리언 값으로 반환한다. | ||
Number.isNaN(NaN); // -> true | ||
``` | ||
|
||
### 삼항 조건 연산자 | ||
|
||
```javascript | ||
var x = 2; | ||
|
||
// 2 % 2는 0이고 0은 false로 암묵적 타입 변환된다. | ||
var result = x % 2 ? '홀수' : '짝수'; | ||
|
||
console.log(result); // 짝수 | ||
``` | ||
삼항 조건 연산자에서 주의할 사항은 물음표 앞의 첫번째 피연산자는 값으로 평가될 수 있는 표현식이어야 한다. | ||
|
||
다음과 같은 경우는 성립안됨 | ||
```javascript | ||
var x = 10; | ||
|
||
// if...else 문은 표현식이 아닌 문이다. 따라서 값처럼 사용할 수 없다. | ||
var result = if (x % 2) { result = '홀수'; } else { result = '짝수'; }; | ||
// SyntaxError: Unexpected token if | ||
``` | ||
|
||
#### 논리 연산자 | ||
```javascript | ||
// 논리합(||) 연산자 | ||
true || true; // -> true | ||
true || false; // -> true | ||
false || true; // -> true | ||
false || false; // -> false | ||
|
||
// 논리곱(&&) 연산자 | ||
true && true; // -> true | ||
true && false; // -> false | ||
false && true; // -> false | ||
false && false; // -> false | ||
|
||
// 논리 부정(!) 연산자 | ||
!true; // -> false | ||
!false; // -> true | ||
|
||
// 암묵적 타입 변환 | ||
!0; // -> true | ||
!'Hello'; // -> false | ||
``` | ||
|
||
#### typeof 연산자 | ||
|
||
피연산자의 데이터 타입을 검사해 문자열로 반환 | ||
|
||
|
||
```javascript | ||
typeof '' // -> "string" | ||
typeof 1 // -> "number" | ||
typeof NaN // -> "number" | ||
typeof true // -> "boolean" | ||
typeof undefined // -> "undefined" | ||
typeof Symbol() // -> "symbol" | ||
typeof null // -> "object" | ||
typeof [] // -> "object" | ||
typeof {} // -> "object" | ||
typeof new Date() // -> "object" | ||
typeof /test/gi // -> "object" | ||
typeof function () {} // -> "function" | ||
``` | ||
|
||
단, null 타입인지 확인할 경우 typeof연산자를 사용하지 않고 일치 연산자를 사용해야 한다. | ||
|
||
```javascript | ||
var foo = null; | ||
|
||
typeof foo === null; // -> false | ||
foo === null; // -> true | ||
``` |
Oops, something went wrong.