앞으로 기대되는 ECMAScript 기능

8743 단어 javascript
ECMAScript 스펙 트레인은 어쨌든 느려지지 않았습니다. 그들의 시간을 기다리고 있는 수많은 훌륭한 제안들이 여전히 있습니다.

다음은 제가 특히 기대하는 몇 가지 예정된 ECMAScript 기능입니다.

일시적인



  • Docs , Cookbook , Polyfill

  • 날짜/시간 API는 항상 JavaScript의 약점이었습니다. 이 문제를 해결하기 위해 moment.js(이미 사용되지 않음)와 같은 훌륭한 라이브러리가 등장했고 훌륭하게 수행했습니다.

    그러나 이제 마침내 우리의 지식과 경험을 요약하고 최신의 강력한 날짜/시간 API를 JavaScript 표준 라이브러리에 도입할 수 있는 지점에 도달했습니다.
    TemporalMath 와 같은 유틸리티 함수로 채워진 모듈 역할을 하는 새로운 전역 개체입니다. API는 변경 불가능한 개체를 기반으로 하며 표준 시간대 및 그레고리력이 아닌 달력에 대한 뛰어난 지원이 있습니다.

    여기 몇 가지 예가 있어요.

    // parsing a string
    const d = Temporal.Instant.from('1969-07-20T20:17Z')
    
    // just plain date
    Temporal.PlainDate.from({ year: 2000, month: 8, day: 2 });
    // => 2000-08-02
    
    // difference between two points
    // in time in different time zones
    const { from } = Temporal.ZonedDateTime
    
    from('2020-03-08T11:55:00+08:00[Asia/Hong_Kong]')
      .until(from('2020-03-08T09:50:00-07:00[America/Los_Angeles]'))
      //=> PT12H55M
    


    이 훌륭한 API의 잠재력을 실제로 실현하려면 the cookbook을 훑어보는 것이 좋습니다.

    어레이 그룹화



  • Proposal , Polyfill

  • 이 작은 제안은 Array의 프로토타입에 2개groupgroupToMap를 추가합니다.

    두 방법 모두 특정 기준에 따라 배열의 항목을 그룹화하는 데 사용됩니다(가장 가까운 친척은 lodash의 groupBy ).

      const users = [
        { name: "Jane" },
        { name: "John" },
        { name: "Tom" }
      ]
      users.group(u => u.name.toLowerCase().charAt(0))
      // {
      // "j": [{name: "Jane"}, {name: "John"],
      // "t": [{ name: "Tom" }]
      // }
    

    groupToMap 는 유사하게 작동하지만 Map 을 제공합니다. 문자열이 아닌 키가 필요할 때 유용할 수 있습니다.

    음, other reasons to prefer Maps이 있습니다.

    어레이의 복사에 의한 변경(단계 3)



  • Proposal , Polyfill
  • reverse , sort 또는 splice 와 같은 Array의 메서드에 어떤 문제가 있습니까? 글쎄요, 그들은 모두 훌륭합니다. 유일한 문제는 배열을 제자리에서 수정하여 FP 코드에서 사용하기 어렵게 만든다는 것입니다.

    이 제안은 유사하게 작동하지만 원본 배열을 수정하지 않는 배열(및 typed arrays)에 대한 4개의 새로운 비변형 메서드( toReversed() , toSorted() , toSpliced()with() )를 도입합니다.

    마지막 것은 배열의 단일 요소를 대체하는 데 사용됩니다.

    ['j', 'a', 'n', 'e'].with(2, 'd')
    //=> ['j', 'a', 'd', 'e']
    


    레코드와 튜플



  • Proposal , Playground

  • 레코드와 튜플은 객체 및 배열과 유사하지만 완전히 변경할 수 없는 새로운 기본 데이터 구조입니다.

    const record = #{ name: "John", surname: "Smith" }
    const tuple = #[1, 2, 3]
    


    구문은 그것들과 객체/배열 사이의 유사점을 강조합니다. # 접두사를 붙이기만 하면 됩니다.

    레코드와 튜플은 다른 기본 값(다른 레코드/튜플 포함)만 포함할 수 있습니다.

    이 제한으로 인해 깊이 변경이 불가능합니다.

    다른 프리미티브와 마찬가지로 동등성 비교===가 작동하도록 합니다. 두 레코드/튜플이 구조적으로 깊이 동일하면 ===true를 반환하며 이는 큰 문제입니다.

    이러한 데이터 구조를 도입하는 것은 JavaScript 기능 기능을 향상시키는 좋은 방법입니다(불변성은 기능 패러다임에서 중요하므로).

    그러나 이것은 상당히 큰 주제이므로 전용 기사에서 다시 설명하겠습니다.

    다음에 갈 곳



    그것들은 내가 기다릴 수 없는 훌륭한 JavaScript 제안이었습니다. 당신도 그들을 좋아하길 바랍니다.

    더 많은 제안은 the official GitHub page에서 찾을 수 있습니다.

    좋은 웹페이지 즐겨찾기