연산이 들어왔을때 해당 값타입은 숫자로 변환을 시도한다.
자바스크립트는 기본적으로 웹페이지에서 활용되기 때문에
민감한 에러를 내지 않으려는 특성을 가진 언어이다.
해당 값은 연산을 위해 변환된 값이다.
값타입 / 연산때문에 변환을 시도할때
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 유동 소수점 처리 때문에
원치않는 값이 나온다. 대응하는 방법은 아래 처럼 처리한다.
'프로그래밍 > JavaScript' 카테고리의 다른 글
미션 (0) | 2021.02.16 |
---|---|
[JavaScript] push와 concat의 중요한 차이 (0) | 2021.01.31 |
[JS] 변수 선언 : var / let / const의 차이점[ES6] (0) | 2021.01.15 |
자바스크립트 핵심 개념 : prototype (2) | 2020.12.20 |
자바스크립트 핵심 개념 : 클로저 (0) | 2020.12.20 |