Object,즉 객체는 변경이 가능한 값이다. 프로퍼티를 삭제, 읽기, 갱신, 쓰기, 재정의 등을 할 수 있다. 자바스크립트에서는 이 객체의 가변성에 제한을 줄 수 있는 메소드들을 제공한다. 아래와 같이 세가지가 존재한다 구분 메소드 프로퍼티 추가 프로퍼티 삭제 프로퍼티 값 읽기 프로퍼티 값 쓰기 프로퍼티 어트리뷰트 재정의 객체 확장금지 Object.preventExtensions X O O O O 객체 밀봉 Object.seal X X O O X 객체 동결 Object.freeze X X O X X 객체 확장 금지 객체 확장 금지는 Object.preventExtensions메소드로 객체 확장을 금지한다. 객체 확장을 금지한다는 것은 프로퍼티 추가하는것이 제한된다는 것을 의미한다. 프로퍼티 동적 추가,..
Language/JavaScript
자바스크립트 엔진은 프로퍼티를 생성할 때 프로퍼티의 상태를 나타내는 프로퍼티 어트리뷰트를 기본값으로 정의하게 된다. 프로퍼티의 상태에는 아래 네가지가 존재한다 value 프로퍼티 값 writable 값 갱신 가능여부 enumeratable 열거 가능여부 configurable 재정의 가능여부 이는 자바스크립트 엔진에서 관리하는 내부슬롯 [[value]], [[writable]], [[enumerable]], [[configurable]]값들이다. 이 어트리뷰터에 직접적인 접근은 안되지만 Object.getOwnPropertyDescriptor메소드를 사용해서 간접적으로 확인할 수 있다. Object.getOwnPropertyDescriptor 메소드의 첫번째 매개변수에는 객체가, 두번째 매개변수는 프로퍼..
ES5+까지는 var로 변수를 선언했어야 하는 반면에 ES6부터는 var, let, const를 사용해서 변수를 선언할 수 있다. 여기서 가장 크게 var 과 let은 상수가 아닌 변수를 선언한다라는 공통점이 있지만, 서로간의 성격이 다르다. 결론부터 말하면 let은 var키워드가 가진 여러 단점들을 보완하기 위해 나타난 키워드라고 생각하면 된다. 그렇다면 어떤 차이점이 있을까? 1. 변수 중복 선언 금지 var키워드 같은 경우에는 중복 선언이 가능했었다. 하지만 let키워드는 중복선언이 되지 않는다. var a = 10; var a = 30; let b = 20; let b = 30; // Syntax Error 2. 블록 레벨 스코프 vs 함수 레벨 스코프 var 키워드 같은 경우에는 함수 레벨 스코..
자바스크립트에서 변수선언에 있어 키워드로 var, let, const가 있다. 그 중 var의 특성중 하나가 함수레벨 스코프이다. 일반적인 C,Java같은 언어에서는 함수 뿐만 아니라 모든 코드블록(반복문, 조건문 등) 에서 지역 스코프를 만들게 된다. 이러한 특성을 블록 레벨 스코프라고 한다. 자바스크립트에서 변수 선언문 let키워드가 블록레벨 스코프 성격을 띄고있다. 반면 자바스크립트에서 var 키워드 같은 경우에는 '함수의 코드 블록'만 지역 스코프로 인정하게 된다. 이러한 특성을 함수레벨 스코프라고 한다. 예시를 들어보면 아래와 같이 들 수 있다. var a = 10; for(var i = 0;i < 3; i++){ var a = i; console.log(i); // 0 1 2 } functio..