Codestates의 underbar 과제를 하다가 uniq의 풀이법이 많아보이는 것 같았다. 그래서 아예 lodash의 uniq를 찾아보려고 가니 documentation에서 equality comparison으로 SameValueZero 를 사용해줬다는 대목이 나와서 찾아봤다.
ECMAScript에서는 같은지 아닌지 비교할때 여러가지 방법을 마련해뒀는데, 그 중에서 SameValueZero를 차용했다는 뜻으로 보인다. Javascript에서 쓰는 ===와 비교하면
NaN을 비교했을 때, true로 나온다는 점만 빼고는 같다.
여튼 ECMAScript에는 위 두가지에 따라서 총 3가지 비교 방식이 있다.(SameValue, SameValueZero, Strict Equality Comparison. '==' 처럼 type이 달라도 일단 false를 반환하지 않는 비교방식은 제외하고, 3가지 인 것이다.) 현재 Javascript에서 사용하는 것은 Strict Equality Comparison 방식이다.
ECMAScript는 scripting-language의 기술 표준(Spectification)이라고 하고, Javascript는 ECMAScript의 subset(부분집합)이라고 한다. scripting-language가 무엇인지도 짚고 넘어가야할 것 같지만 대충 느낌은 오고 읽어봐도 잘 모르겠어서 패스했다. 여튼 ECMAScript는 근본적인 표준인 것 같고, Javascript외에도 ActionScript, JScript, V8 등이 ECMAScript를 이용해서 만들었다고 한다.
용어를 헷갈리지 않기 위해서 ECMAScript의 역사를 보면, Brendan Eich가 JavaScript라고 명명한 언어를 만들었는데, 이걸 이후에 표준으로 받아들이면서 ECMAScript로 이름을 바꿨다고 한다. 즉 Javascript -> ECMAScript가 됐고, 이후에 ECMAScript에서 현재의 Javascript가 만들어진 것이다.
array에서 for ... in 을 사용할 때 주의할 점이 있다고 한다는 포스팅을 같은 코드스테이츠 33기인 건휘님이 올려주셨다. 전혀 몰랐어서 더 검색해보니 MDN 에 Enumerability 항목 문서가 있었다. (링크)
첫번째 문단에 Enumerable properties란 내부적인 enumerable flag가 true로 돼있는 properties를 뜻한다는 문장이 있다. 그리고 for ... in 은 object에서 enumarable property에 모두 접근하는데, 문제가 되는 상황은 prototype까지 따라 탐색한다는 것이다. 해결 방법은 같은 페이지 표에 Detection 항목에 있는 hasOwnProperty method를 이용하는 것이다. 이 method는 prototype의 property까지 detection하지는 못하므로 자동적으로 해당 object의 property들만 검사하게 되고, for ... in 은 enumerable만 접근하므로, 해당 object의 property + enumerable만 접근하게 된다.
poiemaWeb에서 이벤트 핸들링을 등록하는 방법으로 3가지를 소개해줬다. 첫번째는 인라인 방식, 두번째는 이벤트 핸들러 프로퍼티 방식, 세번째는 addEventListener 메소드 방식이다. 이 때 이를테면 onclick에 이벤트 핸들러를 등록해주고 클릭한 요소에 접근하고자 하면 뒤 두가지 방법만 소개해주고 있다. 하지만 찾아보니 인라인 방식도 방법이 있다.
argument로 정확히 'event'를 넘겨주거나 (그럼 넘겨준 event를 이용해서 target property를 이용하는 등으로 요소에 접근가능하다.)
<p id="p">
argument로 this를 넘겨주는 방식
<p id="p">