我爱编程程序员web前端开发

typescript中的二维数组和初始化

2016-11-26  本文已影响0人  luopeizhen

在javascript中其实没有二维数组的类型, 我们实现二维数组的方法是向数组的元素插入数组, 而typescript提供了不一样的方式来表示二维数组.

typescript的二维数组写法如下:

let twoM : string[][]

这是变成成js后的代码

var twoM;

也可以用Array

let twoM : Array<Array<string>>;

建议声明数组用Array, 代码比较清晰.
请注意这段代码, 编译成js后, 变量是不会自动初始化成数组的, 如果之后直接给twoM插入一个值会报错, 例如:

let twoM : string[][]
twoM.push(["abc"])

编译成功, 但是执行编译后的js会出现这个错误

TypeError: Cannot read property 'push' of undefined

我们看看编译后的js

var twoM;
twoM.push(["abc"]);

由于twoM只是声明了, 并没有初始化, 所以运行的时候变量的初始值是undefined.

要避免这个错误, 可以在声明的时候初始化变量

let twoM : string[][] = []
//或
let twoM : Array<Array<string>> = new Array<Array<string>>()

这样编译后的js就是

var twoM = [];
//或
var twoM = new Array();

现在运行就不会出问题了, 这里还要注意, 由于是二维数组, 所以第二维还是undefined的, 不能直接twoM[0][1] = "a1", 这样可以编译通过, 但是执行的时候会出现刚才同样的错误.

正确的初始化方式是这样的

twoM[0] = ["a1", "a2", "a3"]  //直接赋值数组
twoM.push([])  //先插入一个空的数组
twoM[1][1] = "b2"  //再向刚插入的数组赋值

在javascript中其实没有二维数组的类型, 我们实现二维数组的方法是向数组的元素插入数组, 虽然typescript提供了不一样的方式来表示二维数组, 但是最终编译成js的实现形式其实没有多大改变, 所以有几点需要注意:

上一篇 下一篇

猜你喜欢

热点阅读