자바스크립트 :: 바나나
자바스크립트를 헷갈리게 하는 몇가지 문제들을 소개해본다.
console.log('b' + 'a' ++ 'a' + 'a').toLowerCase();
//banana
첫 글자 b
와 a
는 문자열이므로 쉽게 ba
로 변환된다. 그러나 그 다음 ++ 'a'
에서 첫번째 + 기호는 이전 문자열 더하기와 같은 기능을 수행하지만 뒤에 있는 +는 문자열을 숫자로 바꾸는 unary operator로의 역할을 한다. 그러나 뒤에 따라 붙는 a는 숫자로 변환할 수 없으므로 NaN
이 반환되게 되는데 이것이 toLowerCase()
에 의해 소문자로 변해 최종적으로 banana
가 출력된다.
배열 더하기
console.log([1, 2, 3]+[4, 5, 6]);
//1, 2, 34, 5, 6
이 배열은 먼저 string
으로 변환된 후 더해진다. 위 코드는 "1, 2, 3" + "4, 5, 6"
과 같은 기능을 수행한다.
func()는 함수가 아니다
func ≠func()
function func(){
return something
}
func();
함수를 가리키는 것은 func
func()는 함수에 대한 참조 또는 함수의 리턴 값을 나타낸다
onclick은 따옴표 안에서 식을 function으로 한 번 감싸주기 때문에 사실 식이 들어가는 곳임 func()를 넣으면 func()를 실행하는 함수가 실행될 뿐이다.
0.1+0.2 !== 0.3
가장 자주 인용되는 문제이다.
console.log(0.1 + 0.2); // 0.30000000000000004
이 문제는 floating-point를 사용하는 모든 언어에서 발생하는 문제이다. 이 언어들은 숫자를 표현하는데 정해진 비트 수가 있는데 0.1과 0.2는 2진수로 나타낼 때 정확히 나누어 떨어지지 않아 무한히 이어지게 되므로 일정 소수점 자리에서 한 번 반올림 된다.
0.1+0.2는 0.1과 0.2에 해당하는 2진수를 더한 후 반올림 한 수(실제보다 약간 커진다.)이며 0.3은 0.3을 반올림 한 수 이므로 두 값은 다르게 나온다.
'front-end > javascript' 카테고리의 다른 글
[javascript] 자바스크립트의 sort( )는 문자정렬이구나... (문자, 숫자 ,Object 정렬법) (7) | 2020.04.21 |
---|---|
[javascript] 자바스크립트 es6 map (0) | 2020.02.02 |
[javascript] ES6 클래스와 Prototype / 왜 Object instanceof Function은 true인가 (4) | 2019.11.09 |
[javascript] ES6 export vs NodeJS module.exports와 exports의 차이 (0) | 2019.10.25 |
[javascript] 자바스크립트 Drag&Drop 구현하기 (0) | 2019.10.06 |
댓글