자바스크립트가 좀 이상해요!!

여러분, 잘 지내고 계시길 바랍니다.

오늘 저는 Javascript 언어에 대해 정말 이상한 몇 가지 이상한 점에 대해 이야기하고 싶었습니다.

기본부터 시작하겠습니다.

자바스크립트란?



Javascript은 ECMAScript 표준을 준수하는 스크립팅 언어입니다. 아시다시피 초기 릴리스는 1995년 12월에 불과 10일 만에 구축되었습니다.

내가 말한 것.



그러나 Js는 약간 이상하고 항상 생각한 대로 작동하지 않으며 예상한 결과를 생성하지 않습니다.

참고: 수석 JS 개발자도 이러한 구문 중 일부를 사용하지 않습니다. 이 게시물은 기발한 js가 어떻게 얻을 수 있는지 보여주기 위한 것입니다.

Talk is cheap 코드를 보여줘



여기 있습니다.

if(0.2+0.1 == 0.3){
  console.log("Foo");
}else{
  console.log("bar");
}


출력: 바
출력을 기대하면 "Foo"에서 로그아웃될 것이라고 말할 수 있습니다. 그러나 이것이 문제입니다. 이렇게 하면 "bar"가 기록되는 이유를 알 수 있습니다.

console.log(0.2+0.1);   //0.30000000000000004


따라서 분명히 0.30000000000000004는 0.3과 같지 않습니다.

좋아, 다음.

console.log([,].length);  //1


따라서 배열에는 2개의 요소가 있습니다. 맞습니까? 쉼표 앞에 하나, 그 뒤에 하나(비어 있음에도 불구하고). 그러나 JS는 이것을 1개의 요소로만 취급합니다. Js에서는 배열의 마지막 위치(마지막 쉼표 뒤)에 값을 전달하지 않는 한 이것을 값으로 취급하지 않고 배열에 삽입하지 않지만 다른 위치에서는 그렇지 않습니다.
마지막 쉼표는 trailing comma
예를 들면 다음과 같습니다.

console.log([1,2,].length);  //2
console.log([,,3].length);   //3


여기에서 마지막 위치에 아무 것도 전달하지 않으면 배열의 길이는 2이지만 마지막 위치만 전달하면 다른 모든 값을 계속 계산합니다.

하나 더
우리 모두는 코딩 여정의 한 시점 또는 다른 시점에서 증분 연산자를 사용했습니다.
JS에서 살펴보겠습니다.

console.log(++1);  //Error
console.log(++true);  //Error


증가 연산자가 Js에 존재하지 않을 수 있다고 말할 수 있습니다. 그러나 구문이 절대적으로 정확하다는 것을 말씀 드리겠습니다.

let foo=1;
console.log(++foo);  //2
let bar = true;
console.log(++bar);  //2 


이것은 유효한 구문이지만 변수에서만 작동합니다.
그리고 이것은 Js에만 해당되는 것이 아니라 Java, C 및 더 많은 프로그래밍 언어에서도 동일한 방식으로 작동합니다.

마지막 하나

console.log((10,2));  //2
console.log((2+1,3+1,1));  //1
console.log((2-1,3*1,1+1));  //2


comma operator은 피연산자를 왼쪽에서 오른쪽으로 평가하지만 마지막 피연산자만 반환합니다.

마지막 생각들



따라서 js가 약간 재미있는 언어이고 우리가 생각하는 것과 동일하게 작동하지 않는다는 사실에 여러분 모두 동의하실 것입니다.

Js가 충분히 이상하지 않다고 생각한다면 아래 댓글로 알려주세요. 그러면 Js가 가진 더 많은 단점에 대한 또 다른 게시물을 작성할 것입니다.

자, 그럼 우망 미탈이 서명하겠습니다.

좋은 웹페이지 즐겨찾기