编者按:本文译者李松峰,资深技术图书译者,翻译出版过40余部技术及交互设计专著,现任360奇舞团Web前端开发资深专家,360前端技术委员会委员、W3C AC代表。
原文地址:https://2ality.com/2020/05/records-tuples-first-look.html
原文作者:Dr. Axel Rauschmayer
Dr. Axel Rauschmayer最近撰文介绍了还处于Stage1阶段的两个JavaScript新特性:记录和元组。
记录和元组是一个新提案(Record & Tuple,https://github.com/tc39/proposal-record-tuple),建议为JavaScript增加两个复合原始类型:
记录(Record),是不可修改的按值比较的对象
元组(Tuple),是不可修改的按值比较的数组
什么是按值比较
当前,JavaScript只有在比较原始值(如字符串)时才会按值比较(比较内容):
> 'abc' === 'abc' true
但在比较对象时,则是按标识比较(by identity),因此对象只与自身严格相等:
> {x: 1, y: 4} === {x: 1, y: 4} false > ['a', 'b'] === ['a', 'b'] false
“记录和元组”的提案就是为了让我们可以创建按值比较的复合类型值。
比如,在对象字面量前面加一个井号(#),就可以创建一个记录。而记录是一个按值比较的复合值,且不可修改:
> #{x: 1, y: 4} === #{x: 1, y: 4} true
如果在数组字面量前面加一个#,就可以创建一个元组,也就是可以按值比较且不可修改的数组:
> #['a', 'b'] === #['a', 'b'] true
按值比较的复合值就叫复合原始值或者复合原始类型。
记录和元组是原始类型
使用typeof可以看出来,记录和元组都是原始类型:
> typeof #{x: 1, y: 4} 'record' > typeof #['a', 'b'] 'tuple'
记录和元组的内容有限制
记录