언어와 실행 환경
함수와 객체, 값과 연산에 관한 규칙은 언어에 속한다. DOM과 네트워크 요청, 파일 접근 등은 실행 환경이 제공하는 API와 연결된다. 같은 언어 코드라도 어디에서 실행하는지에 따라 사용할 수 있는 기능이 다르다.
자바스크립트와 자바는 이름이 비슷하지만 서로 다른 언어다. 한쪽의 타입과 실행 규칙을 다른 쪽에 그대로 적용해서는 안 된다.
값과 타입 변환
변수에 저장된 값의 타입은 실행 중 달라질 수 있다. 일부 연산은 암묵적인 타입 변환을 수행하므로 문자열과 숫자가 섞인 결과를 주의해서 읽어야 한다.
명시적으로 값을 변환하고 입력 조건을 검증하면 이런 차이를 줄일 수 있다. 비교 연산의 종류와 값이 없는 상태의 표현도 언어 규칙에 맞게 이해해야 한다.
비동기 코드와 대기
네트워크 요청 같은 작업의 완료를 기다리면서 다른 작업을 진행하는 코드를 작성할 수 있다. Promise와 async·await는 이런 비동기 흐름을 다루는 방법이다.
await가 있다고 무거운 계산이 자동으로 다른 CPU에서 병렬 실행되는 것은 아니다. 실행 환경의 이벤트 루프와 작업 분담을 고려해야 응답성을 유지할 수 있다.
브라우저에서의 역할
자바스크립트는 사용자 입력에 반응하고 문서 구조를 바꾸거나 추가 데이터를 가져오는 데 쓰인다. 그러나 중요한 문서 내용과 탐색이 전부 실행 후에만 생기면 일부 환경에서 접근과 크롤링이 어려워질 수 있다.
스크립트는 입력을 신뢰해서는 안 되며 서버의 권한 검사도 대신하지 못한다. 화면에서 버튼을 숨기는 것과 실제 작업 권한을 제한하는 것은 별도의 문제다.