0%

【053】typescript:数组和元组的区别

元组是一种特殊的数组,元组种元素的类型可以不相同,数组中元素的类型必须相同。

相同点

  1. 元组和数组都支持索引,可以通过索引访问元素。
    1
    2
    3
    4
    let arr_06: number[] = [1, 2]
    console.log(arr_06[0]) // 1
    let tuple_03: [string, number] = [ '小红', 29 ]
    console.log(tuple_03[0]) // 小红
  2. 元组和数组都有一个名为length的长度属性,可以用来获取当前元素的个数。
    1
    2
    3
    4
    let arr_06: number[] = [1, 2]
    console.log(arr_06.length) // 2
    let tuple_03: [string, number] = [ '小红', 29 ]
    console.log(tuple_03.length) // 2

不同点

定义

  1. 数组是一种数据结构,用于存储一系列相同类型的元素。它可以容纳多个值,并通过索引来访问和操作这些值。
    1
    2
    3
    4
    5
    let arr_01: number[] = [1, 2, 3]
    let arr_02: Array<string> = [ 'a', 'b', 'c' ]
    // 固定数组的长度
    let arr_03: Array<number> = new Array(3)
    let arr_04 = new Array<number>(3)
  2. 元组类型是另一种数组类型(可以简单理解为元组是数组的变种),它确切地知道它包含多少个元素,以及它在特定位置包含哪些类型。
    1
    let tuple_01: [ string, number ] = [ '小翠', 18 ]

可变性

  1. 数组是可变的,可以直接修改数组的现有元素。
    1
    2
    3
    let arr_05 = [1, 2]
    arr_05.push(3)
    console.log(arr_05[2]) // 3
  2. 元组是不可变的,如果修改元组会导致创建新的元组副本。
    1
    2
    3
    4
    let tuple_02: [ string, number ] = [ '小红', 29 ]
    tuple_02.push('女')
    // 长度为 "2" 的元组类型 "[string, number]" 在索引 "2" 处没有元素。
    console.log(tuple_02[2])

性能

  1. 数组的每次修改都需要重新分配内存,这可能导致性能上的开销。
  2. 由于元组是不可变的,它们可能在某些情况下被视为性能更优的选择,尤其是在频繁的迭代和修改操作时。

用途

  1. 数组则常用于存储一组相同类型的数据,以及进行数学计算和数据处理。
    1
    2
    // 必须全部是number类型;
    let arr_01: number[] = [1, 2, 3]
  2. 元组通常用于存储不同类型的数据,或者作为函数的参数,因为它可以安全地传递给函数并保持不变。
    1
    2
    // [ 姓名, 年龄 ]
    let tuple_01: [ string, number ] = [ '小翠', 18 ]