Objects
#
Objects#
no-new-object : Object 생성 -> 리터럴 문법 사용 { }- 객체 리터럴 구문은 더 간결하며 new Object() 의 성능 차이는 없다.
#
계산된 속성명을 obj 안에서 정의해야 한다.bad case 의 경우, 계산된 속성명을 obj 정의시 지원이 안됐던 시절 사용했던 방법이다.
지금은 obj 안에 계산된 속성명이 사용가능하기 때문에
- 가독성을 위해
- obj 에서 계산된 속성명을 한번더 검사해서 값을 할당하는 방식은 불필요
#
object-shorthand : 객체 메서드는 shorthand 사용- 객체 리터럴을 훨씬 더 깔끔하게 정의할 수 있다.
- 화살표 함수에는 eslint 플래그를 지정하지 않는다.
shorthand
- function 에서 많은 기능이 제한되어 오직 method 로서만 사용할 수 있는 특수 함수.
- shorthand 로 정의된 메서드는 현재 객체의 수퍼 프로토타입을 찾을 수 있는
[[HomeObject]]
메서드를 가지기 때문에 메서드 내에서 super 를 호출 할 수 있다.
#
object-shorthand : 프로퍼티의 shorthand 사용#
객체의 시작 부분에 shorthand properties 를 그룹화 한다.#
quote-props : 유효하지 않은 식별자 이름만 quote 프로퍼티 사용- 가독성
- syntax highlighting 이 잘 된다.
- JS 엔진에서 더 쉽게 최적화 된다.
#
따옴표를 사용해야 하는 경우- 속성 이름에 비 식별자 문자를 사용 (예 : "one two")
- 숫자 리터럴을 속성 키로 사용
- ES5 엄격 모드에서 구문 오류 발생
- 숫자를 문자열로 강제 변환하는 과정
String(1e2)
와String(100)
이100
으로 같다.- 엄격 모드에서는 중복된 키를 허용하지 않는다.
#
no-prototype-builtins : hasOwnProperty, propertyIsEnumerable, isPrototypeOf 를 Object.prototype 메서드로 직접 호출하지 않기Object.prototype.hasOwnProperty.call
이런식으로 쓰지 않고 object.hasOwnProperty(key)
으로 쓰면,
object 가 null
이거나 object 의 hasOwnProperty: false
일 경우 메서드가 가려진다.
-> 가려져 에러가 난다.
#
얕은 복사 / 특정 프로퍼티를 제외한 오브젝트를 얻을 때- 얕은 복사 : spread operator > Object.assign,
- 특정 프로퍼티를 제외한 오브젝트를 얻을 때 : rest operator > delete 프로퍼티