본문 바로가기
프로그래밍/JavaScript

[JavaScript] (+ - * /) 연산자 특성정리

by 소소로드 2021. 2. 19.

연산이 들어왔을때 해당 값타입은 숫자로 변환을 시도한다.
자바스크립트는 기본적으로 웹페이지에서 활용되기 때문에
민감한 에러를 내지 않으려는 특성을 가진 언어이다.
해당 값은 연산을 위해 변환된 값이다.


값타입 / 연산때문에 변환을 시도할때
Undefined => NaN

Null => 0
Boolean => true:1, false:0
Number => 전후 같음
String => 값이 숫자이면 숫자연산, 더하기는 연결



[ + 연산자 ]

+ 연산의 특성

var two = "2";
var value = 1 + two
console.log(value); // 12
console.log(typeof value); // string

var data = 1 + 5 + 'ABC'
console.log(data); // 6ABC

: + 연산자는 결과를 더하고, 또한 결과를 연결하는 속성이 있다.
JS에서는 되도록 에러를 덜 내려는 특성이 있기 때문에
value는 값을 연결하여 문법에러가 나지 않고 12를 반환한다.
data의 경우 있는 숫자를 더해서 연결한다.


숫자 값으로 변환한 +연산

var value;

console.log(10 + value); // NaN
: 에러가 아니라, 10과 Undefined의 더하기를 시도했다.

console.log(10 + null); // 10
console.log(10 + true); // 11 
console.log(10 + false); // 10
: 해당 값들도 마찬가지로 더하기를 시도한다.

console.log(10 + "123"); // 10123 
console.log(123 - "23"); // 100
: 중요한 부분이다. +연산의 경우 연결의 속성이 있어서
string이면 문자열로 인식하여 연결하지만,
-, *, /는 숫자 string이면 숫자로 변환하여 연산한다.



[ -, *, / 연산자 ]

- 연산자의 특성

console.log("123" - 23); // 100
: 값을 Number 타입으로 변환하여 계산
그냥 숫자로 보이면 다 계산된다고 생각하면 편하다.

* 연산자의 특성( /도 동일)

console.log(10 * "20"); // 200 
console.log(10 * true); // 100
console.log(10 * null); // 0
console.log(10 * "A"); // NaN

: 하나라도 숫자가 아니면 NaN을 반환하는데
역시 숫자 변환을 시도하며 한쪽이 문자의 경우 NaN이 반환된다.


console.log(2.3 * 3); // 6.89999999~
console.log(2.3 * 10 * 3 / 10); // 6.9
: 첫번째는 예상치 못한 결과이다. IEEE 754 유동 소수점 처리 때문에
원치않는 값이 나온다. 대응하는 방법은 아래 처럼 처리한다.