>웹 프론트엔드 >JS 튜토리얼 >레코드 및 튜플 : JavaScript '의 새로운 불변 ​​데이터 유형

레코드 및 튜플 : JavaScript '의 새로운 불변 ​​데이터 유형

Christopher Nolan
Christopher Nolan원래의
2025-02-12 08:25:09273검색

Records and Tuples: JavaScript's New Immutable Data Types JavaScript 레코드 및 튜플 : 불변의 데이터 구조의 미래 JavaScript는 기록과 튜플의 두 가지 새로운 불변 ​​데이터 유형을 안내하려고합니다. 그들은 현재 TC39 표준 승인 프로세스의 2 단계에 있으며 여전히 개선되고 있으며 브라우저 나 런타임 환경에서는 사용할 수 없지만 내년 내에 구현 버전을 사용할 수있을 것으로 예상됩니다. 그들은 배열과 객체를 사용할 때 개발자가 직면 한 어려운 문제를 해결하도록 설계되었습니다.

키 포인트

레코드와 튜플은 JavaScript로 개발중인 새로운 불변의 데이터 유형이며 내년 내에 제공 될 것으로 예상됩니다. 그들은 기능이 의도적으로 또는 의도하지 않은 값을 배열이나 객체에 저장하지 않도록하는 등 개발자가 직면 한 문제를 해결하도록 설계되었습니다.

튜플은 깊이가 불변의 배열과 같은 데이터 구조입니다. 미지급 값을 가질 수 없으며 기본 유형, 다른 튜플 또는 레코드 만 설정할 수 있습니다. 튜플은 원시 유형이므로 다른 튜플과 깊이를 값으로 비교할 수 있습니다.

레코드는 불변의 깊이가있는 객체와 유사한 데이터 구조입니다. 문자열 속성 이름을 사용해야하며 원시 유형, 다른 튜플 또는 레코드로만 값을 설정할 수 있습니다. 레코드는 다른 레코드와 심층적으로 비교할 수 있으며 속성 순서는 관련이 없습니다.

    const
  • 의 한계 경험이 풍부한 JavaScript 개발자는 변수를 선언하기 위해
  • 를 사용하는 것이 가장 모범임을 알고 있습니다. 변수를 불변으로 만듭니다. 값을 변경할 수 없으므로 더 적은 문제를 처리해야합니다.
  • 불행히도,
  • 는 기본 값을 불변으로 만 만들 수 있습니다 (문자열, 숫자, bigint, 부울, 기호 및 정의되지 않은). 배열이나 객체를 재 할당 할 수는 없지만 포함 된 값과 속성은
  • 를 수정할 수 있습니다. 예를 들면 :

객체에 대해서도 마찬가지입니다

메소드는 도움이 될 수 있지만 물체의 직접적인 자식 속성에 얕은 동결 만 적용됩니다. const 따라서 함수가 배열이나 객체에 저장된 값을 의도적으로 또는 의도하지 않은 상태로 변경하지 않도록하기가 어렵습니다. 개발자는 물건을 내버려 두거나 복제 된 버전의 변수를 통과합니다 (이것은 또한 고유 한 과제가 있습니다).

불일치 비교 개발자가 겉보기에 합리적인 객체 나 배열 비교를 만들려고 할 때 더 많은 혼란이 발생할 수 있습니다.

기본 유형 만 값으로 비교할 수 있습니다. 객체와 배열은 기준 const에 의해 전달되고 비교됩니다. 두 변수가 메모리에서 동일한 항목을 가리키는 경우에만 똑같이 : 두 객체 또는 배열의 깊은 비교에는 각 값을 차례로 평가하기 위해 재귀 비교 기능이 필요합니다. 그럼에도 불구하고 다른 방식으로 저장 될 수있는 날짜 나 기능과 같은 유형에 문제가있을 수 있습니다.

튜플 : 불변 배열과 같은 데이터 구조 튜플은 깊이가 불변의 배열과 같은 데이터 구조입니다. 그것들은 실제로 복합 원시 유형이며, 정상 어레이 구문 전에

수정 자로 식별됩니다.

또는 새로운

메소드는 배열에서 튜플을 생성 할 수 있습니다. # 표준 어레이와 달리 튜플은 다음 요구 사항을 충족해야합니다.

그들은
<code class="language-javascript">// 数组常量
const myArray = [1, 2, 3];

// 更改数组值
myArray[0] = 99;
myArray.push(42);

console.log(myArray); // [ 99, 2, 3, 42 ]

myArray = 'change'; // 错误!</code>
의 값을 가진 빈 공간을 가질 수 없습니다. 예를 들어,

는 유효하지 않습니다. Tuple.from() 그들은 기본 유형, 다른 튜플 또는 레코드 만 설정할 수 있습니다. 배열, 객체 또는 함수는 사용할 수 없습니다.

<code class="language-javascript">// 对象常量
const myObj = { a: 1, b: 2, c: 3 };

// 更改对象属性
myObj.a = 99;
myObj.d = 42;

console.log(myObj); // { a: 99, b: 2, c: 3, d: 42 }

myObj = 'change'; // 错误!</code>
튜플은 기본 유형이므로 다른 튜플과 깊이를 값으로 비교할 수 있습니다.

튜플에 단일 값이 포함되어 있으면 Looser

연산자를 사용하여 비교할 수 있습니다. 예를 들면 :
  1. 레코드 : 불변의 객체와 같은 데이터 구조 undefined 레코드는 불변의 깊이가있는 객체와 유사한 데이터 구조입니다. 다시 말하지만, 그들은 정상 객체 구문 앞에서 #[1,,,4] 수정자를 사용하여 식별 된 복합 원시 유형입니다.
  2. 또는 새로운
  3. 생성자는 객체에서 레코드를 만들 수 있습니다.
  4. 또는
메소드는 일련의 배열 또는 튜플 키 값 쌍에서 레코드를 생성 할 수 있습니다.
<code class="language-javascript">const myObj = { a: 1, b: 2, c: { v: 3 } };
Object.freeze(myObj);

myObj.a = 99; // 静默忽略
myObj.c.v = 99; // 可以正常工作

console.log(myObj); // { a: 1, b: 2, c: { v: 99 } }</code>
표준 개체와 달리 레코드는 다음 요구 사항을 충족해야합니다.

그들은 문자열 속성 이름을 사용해야합니다. 예를 들어,

는 유효하지 않습니다.
<code class="language-javascript">const str = 'my string';
console.log(str === 'mystring');  // false

const num = 123;
console.log(num === 123);         // true

const arr = [1, 2, 3];
console.log(arr === [1, 2, 3]);   // false

const obj = { a: 1 };
console.log(obj === { a: 1 });    // false</code>
그들은 원시 유형, 다른 튜플 또는 레코드를 사용하여 값 만 설정할 수 있습니다. 배열, 객체 또는 함수는 사용할 수 없습니다.

== 레코드는 다른 레코드와 깊이로 비교할 수 있으며 속성 순서는 관련이 없습니다.

레코드는 다른 레코드와 만 비교할 수 있으므로 const a = [1, 2]; const b = a; b.push(3); console.log(a === b); // true // 原始数组已更改 console.log(a); // [1, 2, 3] 또는 연산자를 사용하는 것 사이에는 차이가 없습니다. 그러나 특정 비교를 위해

를 추출 할 수 있습니다. 예를 들면 :

불변의 업데이트 # 튜플과 레코드는 복잡한 컴퓨터 과학 용어처럼 들리지만 궁극적으로 강력한 불변의 데이터 저장과 JavaScript의 비교를 허용합니다.

javaScript faq // 新的元组 const t1 = #[1, 2, 3]; const t2 = #[1, 2, #[3, 4]];의 레코드 및 튜플 JavaScript의 레코드는 무엇입니까? JavaScript의 레코드는 ECMAScript 2022 (ES12)에 도입 된 객체와 같은 구조입니다. 이름이 지정된 속성을 갖는 데이터를 나타내도록 설계되었으며 기본적으로 불변 할 수 없으므로 생성 후 값이 변경되지 않는 데이터 구조로 사용하기에 적합합니다.

레코드와 일반 JavaScript 객체의 차이는 어떻습니까? 일반 객체와 달리 JavaScript의 레코드는 기본적으로 불변 할 수 없으며 일단 설정되면 속성을 수정할 수 없습니다. 레코드는 또한 더 예측 가능하고 더 엄격한 구조를 가지고 있으므로 데이터 컨테이너로 사용하기에 적합합니다. Record() JavaScript의 튜플은 무엇입니까? JavaScript의 튜플은 정렬 된 요소 모음으로, 각 요소는 다른 유형 일 수 있습니다. 튜플의 길이는 불행하고 고정되어 특정 순서로 고정 된 값의 값을 표현하고 처리하는 방법을 제공합니다.

레코드와 튜플은 코드의 가독성과 유지 가능성을 어떻게 향상시킬 수 있습니까? 레코드와 튜플은 데이터를 표현하는보다 선언적이고 구조화 된 방법을 제공함으로써 코드의 가독성을 향상시킬 수 있습니다. 불변성 측면은 또한 우발적 인 수정을 방지하여 코드의 유지 보수 성을 향상시킵니다.

레코드와 튜플을 사용할 때 성능 고려 사항이 있습니까? 레코드와 튜플은 불변의 데이터 구조 역할을하며 경우에 따라 성능을 향상시킬 수 있습니다. 그러나 성능 영향은 JavaScript 런타임의 구현 세부 사항에 따라 달라질 수 있으므로 브라우저 지원 및 특정 사용 사례를 고려해야합니다.

기본 지원이없는 환경에서 레코드 및 튜플에 폴리 필을 제공하는 방법은 무엇입니까? 마지막 업데이트 시점에서 레코드와 튜플은 Polyfill 또는 Translator를 사용하여 기본 지원이없는 환경에서 시뮬레이션 할 수 있습니다. 그러나 생태계가 계속 발전함에 따라 JavaScript 표준 및 도구에 대한 업데이트를 최신 상태로 유지하는 것이 좋습니다.

위 내용은 레코드 및 튜플 : JavaScript '의 새로운 불변 ​​데이터 유형의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.