모던 자바스크립트 스터디 3일차이다.
오늘은 9, 10장을 공부했다.
공부하면서 아래에 대한 궁금증이 생겼다.
1. 1 - '1' = 0일까?
2. 빈문자열도 프로퍼티 키로 사용하면 키를 가지고 Parse을 할 수 있을까?
궁금증1
숫자 타입이 아닌 값을 숫자 타입으로 변환하는 방법은 4가지가 있다고 한다.
1. Number 생성자 함수를 new 연산자없이 호출
2. parseInt, parseFloat 함수를 사용해서 문자열만 숫자타입으로 변환
3. + 단항 산술 연산자 사용
4. * 산술 연산자 사용
근데 위의 경우에는 - 산술 연산자를 사용했기 때문에 해당되는것이 없었다.
그럼 왜 이런 일이 발생했을까?
이유
+ is ambiguous. It can mean "concatenate" or "add". Since one side is a string, it is taken to mean "concatenate", hence the result is 11 (which, by the way, was one of my favourite jokes as a young child. That and "1 + 1 = window", as shown visually: │┼│ ニ ⊞)
- however has only one meaning: subtract. So it subtracts.
내가 보기에는 모던자바스크립트 책에서 위의 3번인 + 단항 산술 연산자 사용이 오타인것 같다.
문자열 연결이 수행되므로 +Javascript는 첫 번째 숫자 1을 문자열로 변환하고 "1"과 "1"을 연결하여 "11"을 만든다.
문자열에서는 뺄셈을 수행할 수 없으므로 JavaScript는 두 피연산자를 모두 정수로 사용하여 실제 빼기 연산을 수행한다.
요약하자면,
+ 산술연산자는 문자열끼리 단순히 결합시킨 것을 리턴하고
- 산술연산자는 정수끼리 연산한 것을 수행해서 리턴한다.
1. Number 생성자 함수를 new 연산자없이 호출
2. parseInt, parseFloat 함수를 사용해서 문자열만 숫자타입으로 변환
3. - 단항 산술 연산자 사용
4. * 산술 연산자 사용
모던 자바스크립트 9.3.2의 [예제 09-15] 를 이렇게 수정해야하지 않나라고 생각이 들었다.
궁금증2
빈문자열도 프로퍼티 키로 사용 가능하면 키를 가지고 parse를 할 수 있는지 궁금했다.
결과만 말하자면 YES이다.
객체 안에 ''라는 프로퍼티로 접근을 해서 빈 값을 리턴했고 에러나 undefined를 리턴하지 않았다.
왜 이럴 수 있을까?
이유
An object's key must be a string, and the empty string ('') is a string.
There is no cross browser issue that I've ever come across with empty strings, although there have been very few occasions where I thought it was acceptable to use an empty string as a key name.
I would discourage the general usage of '' as a key, but for a simple lookup, it'll work just fine, and sounds reasonable.
It's a good place to add a comment noting the exceptional circumstance.
객체의 키는 문자열이어야 하며, 빈 문자열( '') 은 문자열이다 .
빈 문자열을 키 이름으로 사용하는 것이 허용된다고해서 빈 문자열로 인해 발생한 브라우저 간 문제는 없다.
빈문자열을 키로 일반적으로 사용하는 것을 권장하지 않지만 간단한 검색의 경우에는 잘 작동하고 합리적일수도 있다.
하지만, ''를 키로 사용하는 것 등의 예외적인 상황을 언급하는 설명을 추가하는 것이 좋겠다 라고 한다.
요약하자면,
프로퍼티에 접근하는 키는 문자열이면 다되는데, 빈 문자열이라고해서 문자열이 아닌것은 아니기 때문에
제외시킬 수 없다는 것이다.
참고
Why does JavaScript handle the plus and minus operators between strings and numbers differently?
Can I use an empty string as an object identifier?
https://stackoverflow.com/questions/8343938/should-i-use-an-empty-property-key
'JaveScript > JaveScript' 카테고리의 다른 글
모던자바스크립트 13, 14장 스터디 (0) | 2023.11.19 |
---|---|
모던자바스크립트 11, 12장 스터디 (0) | 2023.11.18 |
왜 NaN === NaN 는 false이고 0 === -0은 true 일까? (0) | 2023.11.16 |
null과 undefined의 차이 (0) | 2023.11.15 |
자바스크립트에서 세미콜론은 필수인가? (0) | 2023.11.13 |