JavaScript란?
HTML, CSS로 구성되어있던 홈페이지에서 동적으로 변경되는 콘텐츠를 만들고 제어하기 위해 생성된 스크립팅 언어이고, 변수를 *일급 객채 취급하는 언어이다. 이는 변수에 함수를 담을 수 있고 함수를 리턴 할 수 있다는 얘기이다.
JavaScript에서 기본적으로 알아야할 내용들이 몇가지 내용들이 있는데 요약하자면 변수 선언의 종류, 호이스팅, 스코프, 프로토타입, 비동기 처리 정도 있다. 이 정도만 안다면 초급 딱지는 땠다고 생각해도 될 것 같다.
*일급 객체란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다.
JavaScript 변수 선언
보통 var를 사용하여 변수를 선언하였는데 *ES6에서 const, let이 추가되었다. var의 경우 선언과 동시에 어디에 있든 상관없이 undefined라는 값이 할당이 된다. 이를 호이스팅(Hoisting)이라고 하는데 간략하게 말하면 JS는 코드를 스캔하여 구조를 먼저 만들고 실행을 하게되는데 var와 function으로 선언된 식별자는 구조를 만들때 끌어올려 변수와 함수를 초기화 한다. 이때 변수는 값은 할당이 되지 않은 상태이기에 undefined라는 값이 들어가게된다.
* ES6 - ECMAScript의 줄임말로 6번째 버전을 의미한다. 2015년도 출시
종류 : var, let, const
var, function은 위에서 말한대로 호이스팅이되기에 아래와 같이 선언하게 된다면 에러가 아닌 undefined가 출력된다.
console.log(jay)
var jay = 'blog'
그렇다면 const, let은 어떨까?
위와 같이 에러가 나타나는 것을 알 수 있다. 이것은 javascript의 특징 중 하나인 scope 관련 내용으로 추후 자세하게 내용을 다루도록 하겠습니다.
let과 const
let과 const를 쉽게 말하면 let은 수정이 가능하고 const는 수정이 불가능하다.
라고 간단히 말할 수 있지만, 이는 값이 저장되는 변수의 주소값을 의미합니다. 오브젝트를 할당하고 그 오브젝트의 값을 수정하는 건 주소가 변경되지 않기에 수정이 가능합니다.
그럼 어떻게 사용하는게 좋을까?
const는 function이나, 배열 등 주소값이 변하지 않을 때 사용하고,
let의 경우 임시로 함수내에서 선언하여 사용하는 것이 좋다고 합니다.
let과 const는 모두 block단위 scope를 갖고 있기에 함수내에 쓰기 좋습니다. 이와 반대로 var의 경우는 호이스팅 문제로 전역 변수로 변하는 특징이 있어 의도치 않은 문제를 발생할 가능성이 있어 사용하지 않는 것이 좋다고 합니다. (개인적으로는 에러가 발생하지 않기에 이를 활용한다면 문제는 없다고 생각은 드네요)
JavaScript의 암시적 형변환
숫자와 문자를 더할 때, 숫자를 문자로 자동 형 변환하여 붙여준다. 이는 의도한 바가 아닐 수 있다.
javascript는 일반적인 항등연산자(==)의 경우 변수의 타입을 변환해준다.
이를 대체하는 방법은
완전항등연산자(===)를 사용하면 된다. 이는 값의 타입까지 비교하는 연산자이다.
그렇다면 아래의 코드는?
const arr1 = ['apple', 'banana'],
arr2 = ['apple', 'banana'],
sameArrYn = arr1 == arr2;
// 위 sameArrYn의 결과 값은?
값이 같다면 true가 떠야한다고 생각할 수 있지만, 두 배열의 실제 값이 저장될 메모리 주소는 다르기에 값이 다르다고 할 수 있다. 이는 위에 나왔던 const가 수정이 가능했던 것 과 같다.
*__proto__ 라는 속성(멤버)이 자신을 만들어낸 원형인 prototype 객체를 참조하는 숨겨진 링크가 있다.