TypeScript: 基础类型

一、Number类型
在这里插入图片描述
二、字符串类型
在这里插入图片描述
三、数组

let list: number[] = [1, 2, 3]
let list2: Array<number>  = [4, 5, 6]

元组:

let x: [string, number]
x = ['hello', 30]

在这里插入图片描述
元组在ts3.0之后就不准越界访问了,比较合理。比如本来只有2个元素,你却访问第三个元素。
// 数组
let arrayOfNumbers: number[] = [1, 2, 3]
let t1: Array = [1, 2]

function test(a, b, c) {
// 这里的arguments就是一个类(不是真的,是类似)数组
// 具备数组的某些特性,但是很多数组api,他又没有
// 没有forEach方法,也不能将数组赋给arguments
console.log(arguments)
}

test(5,6,7)

// 假如第一项是数字,第二项是字符串,这个要用元组, 合并了不同类型的数组
let user: [string, number] = [‘s’, 20]

四、变量声明
4.1 var

function f() {
    
    
  var a = 10
  return function g() {
    
    
    var b = a + 1
    return b
  }
}
var g = f()
console.log(g()) // 11  闭包
function f(shouldInitialize) {
    
    
  if (shouldInitialize) {
    
    
    var x = 10
  }
  return x
}

console.log(f(true)) // 10
console.log(f(false)) // undefined

等价于

function f(shouldInitialize) {
    
    
  var x
  if (shouldInitialize) {
    
    
    x = 10
  }
  return x
}
function sumMatrix(matrix) {
    
    
  var sum = 0
  for (var i = 0; i < matrix.length; i++) {
    
    
    var currentRow = matrix[i]
    for (var i = 0; i < currentRow.length; i++) {
    
    
      // 重新定义了i,会覆盖上层的i,内层循环到3以后i不再满足外层循环条件
      // 需要重新用个变量j,不要再用i了
      sum += currentRow[i]
    }
  }
  return sum
}

var matrix = [
  [1,2,3],
  [4,5,6]
]
console.log(sumMatrix(matrix)) // 6
function f() {
    
    
  for (var i = 0; i < 10; i++) {
    
    
    setTimeout(function() {
    
    
      console.log(i)
    }, 1000)
  }
}

f()

会输出10个10,也就是i循环 完之后是10,最后的i全是10,并不是想象中的从0、1…开始,每次循环都要创建一个定时器,因为JS是单线程,等到队列中的定时器执行的时候,i已经是10了,有个解决方案就是即时执行,就是利用了闭包的缓存,避开了单线程带来的直观现象
在这里插入图片描述
修改如下,即时执行

function f() {
    
    
  for (var i = 0; i < 10; i++) {
    
    
    (function(j) {
    
    
      setTimeout(function() {
    
    
        console.log(j)
      }, 1000)
    })(i)
  }
}

f()

在这里插入图片描述

4.2 let
在这里插入图片描述

扫描二维码关注公众号,回复: 14334540 查看本文章

在这里插入图片描述
把var换成let就行了,let和var大不相同,直接解决了问题,每次循环,let都重新创建了变量环境,都是新的作用域。效果等同于即时执行。
在这里插入图片描述

let input: [number, number] = [1, 2]
function f([first, second]: [number, number]) {
    
    
  console.log(first, second)
}
f(input)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上图中,等价于:

let {
    
    a: newA, b: newB} = o
等价于
let newA = o.a
let newB = o.b
仅仅只是相当于重新定义了两个变量,改变newA并不会修改o.a的值

猜你喜欢

转载自blog.csdn.net/GY_U_YG/article/details/124868905