【TS】基础数据类型

作者: 德育处主任 | 来源:发表于2020-01-10 15:59 被阅读0次
    微信订阅号:Rabbit_svip


    在了解TypeScript(简称TS)基础数据类型之前,先聊聊类型的“强弱动静”之分。

    TS是JS的超集,JS是一门动态弱类型语言。与之对应的自然有静态类型语言强类型语言

    在学习一门语言之前是值得花时间去区分类型之间的区别,而这也是程序员之间鄙视链出现的原因之一。

    强类型语言

    在强类型语言中,当一个对象从调用函数传递到被调用函数时,其类型必须与被调用函数中声明的类型兼容。
    -- Liskov, Zilles 1974

    上面的观点是由 Liskov 和 Zilles 这两位美国计算机科学家提出的。但很遗憾的是,关于强类型语言的定义到现在为止还存在争议。

    虽然说关于强类型语言的定义还存在争议。

    但主流观点还是:不允许改变变量的数据l类型,除非进行强制类型转换。

    在美国加州大学的讲义中,对强类型语言的定义是:不允许程序在发生错误后继续执行。

    这么一来,C和C++就变成弱类型语言,因为它们没有对数组越界进行检查,由此可能会导致程序的崩溃。


    弱类型语言

    变量可以被赋予不同的数据类型。


    静态类型语言

    编译阶段确定所有变量的类型。

    静态类型语言对类型极度严格,所以代码可读性好,能自文档化,编译时就能立即发现错误并提示,所以运行的时候性能比较好。


    动态类型语言

    执行阶段确定所有变量的类型。

    动态类型语言对类型要求极度宽松,从而也会出现代码可读性较差,也有可能出现一些隐藏的Bug,程序上线后一段时间才能发现,而且还可能难以找出Bug。因为是在执行阶段才确定变量类型,所以性能会差一些。

    在JS中,数据类型是存在隐式转换的。以下面的简单代码为例

    var a = 1;
    console.log(a == true); // true
    

    从上面的代码可以看出,变量a 是数值型,在JS中,非0的数值都可以等于 true(boolean),由此看出,JS 并不属于主流观点中认为的强类型语言。

    通过function传值、es6提供的class等方法,也能看出JS是动态类型语言。这里就不举代码例子了。

    也正因为JS是动态弱类型语言,所以也经常处在鄙视链最底层(虽然企业对懂JS的程序员需求量非常大)。

    由于使用JS的开发者数量也挺庞大的,所以也出现了很多动态语言的支持者。

    比如说:

    1. “性能在不断改善,所以语言的灵活性应该更重要”。对于这点V8引擎就做了很好的支持。
    2. “单元测试可以帮我们发现程序的隐藏Bug”。Jest就是前端同学该上的一门测试课。
    3. 文档可以通过工具生成。

    在当今多元时代,偏见和歧视其实是需要付出一定代价的。所以不管JS是因为历史原因还是其他各种各样的槽点,学了准没错。更何况现在还出现了TS这个超集。



    言归正传,回到 TS 的基础数据类型介绍。

    Number(数值型)

    可以是整型、浮点型、还有各种进制型等等。
    let num = 10; // 整型
    let flo = 1.5; // 浮点型
    let hex = 0xf000; // 十六进制
    let binary = 0b101; // 二进制
    let octal = 0o765; // 八进制
    


    String(字符串)

    可以用单引号、双引号、反引号(数字1左边,tab键上面的那个键)括着
    let str = 'Hello world';
    


    boolean(布尔型)

    只能有 true 和 false。
    let t = true;
    let f = false;
    


    any

    如果一开始不知道赋什么值,可以先定义一个变量。(不建议使用)
    let anything;
    

    上面几种是常用的数据类型。

    当然,TS 还有数组、元组等数据类型,这可以单独拿出来讨论。





    标准写法(建议使用下面的写法)

    上面几种写法,其实是简写形式。

    如果是按照非常标准的写法,可以用下面的方式书写。

    let num: number = 20; // 等同于 let num = 20;
    
    let str: string = 'hello ts'; // 等同于 let str = 'hhello ts';
    
    let t: boolean = true; // 等同于 let t = true;
    
    let anything: any; // 等同于 let anything;
    

    在变量名后,会有一个类型注解。

    这个类型注解相当于强类型语言中的类型声明,能起到一定的约束作用。

    语法:

    (变量/函数) : type
    




    重新赋值

    TS 中的变量,当然也可以重新赋值,不然也不能叫变量。

    但 TS 的重新赋值是比 JS 更为严格的。

    在 TS 中,变量类型一旦定义,就不能通过隐式的方式进行更改。

    正确的重新赋值

    let num = 1;
    num = 2;
    
    
    let str = 'hello';
    str = 'ts';
    
    
    let result = true;
    result = false;
    
    
    // any类型的变量,值和类型都能随便更改。
    // 在 TS 中一般不建议使用 any 类型,因为这样就和 JS 没太大区别了。
    let anything;
    anything = 123;
    anything = 'rabbit';
    anything = true;
    

    错误的重新赋值

    let num = 1;
    num = '1'; // 因为 num 是数值类型,重新赋值成 字符串类型 就会报错。
    
    let result = true;
    result = 1; // 在 JS 中,非0即为真。但在 TS 里,Boolean类型只允许使用 true 和 false。
    

    再重复一遍,在 TS 中,变量类型一旦定义了就不能通过这种隐式的方式改变。




    TypeScript 的数据类型

    • Number
    • String
    • Boolean
    • undefined
    • null
    • Array
    • Function
    • Object
    • void
    • any
    • never
    • 元组
    • 枚举
    • 其他高级类型

    相关文章

      网友评论

        本文标题:【TS】基础数据类型

        本文链接:https://www.haomeiwen.com/subject/qzxmactx.html