js-ES6 학습 노트 - 대상의 확장

5638 단어
1. ES6에서는 객체의 속성과 방법으로 변수와 함수를 직접 쓸 수 있습니다.이런 문법은 함수의 반환값에 사용하면 매우 편리할 것이다.CommonJS 모듈 출력 변수는 간결한 쓰기에 적합합니다.
var ms = {};

function getItem (key) {
  return key in ms ? ms[key] : null;
}

function setItem (key, value) {
  ms[key] = value;
}

function clear () {
  ms = {};
}

module.exports = { getItem, setItem, clear };
//  
module.exports = {
  getItem: getItem,
  setItem: setItem,
  clear: clear
};

2. ES6는 글자의 양으로 대상을 정의할 때 표현식을 대상의 속성 이름으로 한다. 즉, 표현식을 네모난 괄호 안에 놓는다.
let propKey = 'foo';

let obj = {
  [propKey]: true,
  ['a' + 'bc']: 123
};

3. ES5는 두 개의 값이 같은지 아닌지를 비교하는데 두 개의 연산자만 있다. 그것이 바로 같은 연산자==와 엄격한 같은 연산자===이다.전자는 자동으로 데이터 유형을 변환하고 후자NaN는 자신과 같지 않으며+0-0와 같다는 단점이 있다.
ES6는 이 문제를 해결하기 위해'Same-value equality'(동일한 값과 같음) 알고리즘을 제시했다.Object.is가 바로 이 알고리즘을 배치하는 새로운 방법이다.이것은 두 값이 엄격하게 같은지 비교하는 데 사용되며, 연산자(===)를 엄격하게 비교하는 행위와 기본적으로 일치한다.
+0 === -0 //true
NaN === NaN // false

Object.is(+0, -0) // false
Object.is(NaN, NaN) // true

4.Object.assign 방법은 대상의 합병에 사용되며 원본 대상(source)의 모든 매개 속성을 목표 대상(target)에 복사합니다.대상 객체와 소스 객체에 동일한 이름의 속성이 있거나 여러 소스 객체에 동일한 이름이 있으면 뒤의 속성이 앞의 속성을 덮어씁니다.Object.assign 방법은 깊이 있는 복사가 아니라 얕은 복사를 실행한다.즉, 원본 대상의 어떤 속성의 값이 대상이라면 목표 대상이 복사한 것은 이 대상의 인용이다.
이런 끼워 넣은 대상에 대해 동명 속성을 만나면 Object.assign의 처리 방법은 추가하는 것이 아니라 바꾸는 것이다.Object.assign는 그룹을 처리할 수 있지만, 그룹을 대상으로 볼 수 있습니다.
Object.assign([1, 2, 3], [4, 5])
// [4, 5, 3]

// ,Object.assign 0、1、2 , 0 4 0 1。

5. ES5는 세 가지 조작으로 enumerablefalse인 속성을 무시한다.
  • for...in순환: 대상 자체만 훑어보고 계승할 수 있는 매거 가능한 속성
  • Object.keys(): 대상 자체의 모든 열거 가능한 속성을 되돌려주는 키 이름
  • JSON.stringify(): 직렬화 대상 자체만 매거할 수 있는 속성
  • ES6는 새로운 작업Object.assign()을 추가했습니다. enumerable인 속성은 무시하고 개체 자체의 열거 가능한 속성만 복사합니다.

  • 전반적으로 말하면 조작에서 계승된 속성을 도입하면 문제를 복잡하게 할 수 있다. 대부분의 경우 우리는 대상 자체의 속성에만 관심을 가진다.그러니 되도록 false 순환을 하지 말고 for...in로 대체하세요.
    6. 속성의 반복:
  • for...in - 객체 자체 및 상속을 반복하는 열거 가능 속성(Symbol 속성 제외)
  • Object.keys(obj) - 개체 자체의 모든 열거 가능한 속성 (Symbol 속성이 없음) 을 포함하는 그룹을 되돌려줍니다.
  • Object.getOwnPropertyNames(obj) - 객체 자체의 모든 속성을 포함하는 배열을 반환합니다(Symbol 속성은 없지만 열거할 수 없는 속성을 포함합니다).
  • Object.getOwnPropertySymbols (obj) - 객체 자체의 모든 Symbol 속성을 포함하는 배열을 반환합니다.
  • Reflect.ownKeys(obj) - 객체 자체의 모든 속성을 포함하는 배열을 반환합니다. 속성 이름이 Symbol이거나 문자열이거나 열거 가능한지 여부에 관계없이.

  • 상기 5가지 방법은 대상의 속성을 훑어보고 같은 속성을 훑어보는 순서 규칙을 준수한다.
  • 우선 모든 속성 이름이 수치인 속성을 훑어보고 숫자에 따라 정렬한다.
  • 그 다음에 모든 속성 이름이 문자열인 속성을 훑어보고 생성 시간에 따라 정렬한다.
  • 마지막으로 모든 속성 이름이 Symbol인 속성을 옮겨다니며 생성 시간에 따라 정렬합니다.

  • 7. ES5는 Object.keys() 방법을 도입하여 하나의 그룹을 되돌려줍니다. 구성원은 매개 변수 대상 자체의 모든 누적(enumerable) 속성의 키 이름입니다.ES2017은 Object.keys와 조립된Object.keysObject.values를 도입하여 한 대상을 두루 훑어보는 보충 수단으로 Object.entries를 순환적으로 사용하도록 했다.for...of 대상 자체의 범람 가능한 속성만 되돌려줍니다.
    var obj = Object.create({}, {p: {value: 42}});
    Object.values(obj) // []

    위 코드에서 Object.values 방법의 두 번째 매개 변수에 추가된 대상 속성(속성Object.create)은 명시적으로 명시하지 않으면 기본적으로 범람할 수 없습니다. 왜냐하면 p의 속성 설명 대상의 p은 기본enumerable이기 때문입니다. false는 이 속성을 되돌려주지 않기 때문입니다.Object.valuesenumerable로 바꾸면 true는 속성Object.values의 값을 되돌려줍니다.
    8、현재 제안이 하나 있는데, "Null 전도 연산자"(null propagation operator)p를 도입하였다.
    Null 전도 연산자에는 네 가지 사용법이 있습니다.
  • ?.//읽기 대상 속성
  • obj?.prop//동상
  • obj?.[expr]//함수 또는 대상 방법의 호출
  • func?.(...args)//구조 함수의 호출
  • new C?.(...args) 연산자는 그 중 하나가 되돌아오기?.null만 하면 아래로 연산하지 않고 되돌아오기undefined.
    전재 대상:https://www.cnblogs.com/zczhangcui/p/6426398.html

    좋은 웹페이지 즐겨찾기