자바스크립트의 이상하고 이상한 것들

자바스크립트는 처음 배운 프로그래밍 언어지만 자바스크립트는 그다지 직관적인 언어는 아닙니다.

이 게시물에는 자바스크립트에 대한 몇 가지 호기심이 나열되어 있으며 이에 대해 설명하려고 합니다.

#1



자바 스크립트에 따라 계란 또는 닭고기가 먼저 이동합니다.



하나는 계란의 이모티콘이고 다른 하나는 닭의 문자열인 두 개의 문자열이 있는 배열을 가져와 주문 기능을 사용하면 어떻게 주문됩니까?


["🥚", "🐔"].sort(); // ?



정답은


["🐔", "🥚"]



왜요?

javascript는 문자 인코딩에 utf-16을 사용합니다. 두 이모티콘을 비교할 때 utf-16 숫자를 사용하며 닭 이모티콘은 달걀 이모티콘보다 숫자가 낮고 닭이 먼저 배치됩니다. utf-16 인코딩에서 더 작은 숫자를 가지고 있기 때문에 분류 함수를 통과할 때 대문자가 처음에 남아 있는 것은 이 때문입니다.

#2



0.1 + 0.2를 더한 다음 그 합계를 0.3과 비교하면 어떻게 될까요?


0.1 + 0.2 === 0.3 // false



이는 밑이 2인 계산이 수행되고 계산이 완전히 정확할 수 없기 때문에 발생합니다.

뒤에서 일어나는 일은 다음과 같은 비교를 한다는 것입니다.


const sum = 0.1 + 0.2;

sum.toFixed(24); // 0.300000000000000044408921

sum === 0.3 // false



이러한 이유로 비교는 false를 반환합니다. 이 문제는 javascript에만 국한되지 않으며 Python 및 ruby와 같은 다른 언어에도 이 문제가 있습니다.

자바스크립트에서 숫자로 매우 정밀하게 작업하고 싶다면 최신 버전의 js를 사용할 수 있습니다. bigInt

#삼



다음 명령의 결과는 무엇입니까?


"b" + "a" + + "a" + "a"



정답은


"b" + "a" + + "a" + "a"    // baNaNa



이것은 다음과 같이 평가됩니다.


("b") + ("a") + (+ "a") + ("a") // baNaNa 🍌



유형 강제에 의해 더하기 기호를 문자열에 추가하면 문자열을 숫자로 만들려고 시도하고 문자 "a"는 숫자가 아니므로 NaN 또는 (숫자가 아님) 다른 문자가 연결되어 baNaNa라는 단어가 됩니다. .

#4



우리 모두는 두 가지 방법으로 자바스크립트 코드에 주석을 달 수 있다는 것을 알고 있습니다.


// single comment

/*
multi line comment
*/



그러나 html 주석을 사용하여 주석을 달 수 있다는 것을 알고 계셨습니까?


<!---
const baf = "😲";
--->



이는 html 내의 자바스크립트 상호 운용성을 위해 가능합니다.

좋은 웹페이지 즐겨찾기