一、准备

TS会被编译成JS。

1、准备工作

  • TS编译器。OSS(Open Source Software,开源软件)

    安装

  • npm install typescript@next

  • 使用:在vscode的.vscode/settings.json来使用这个版本。

    1. {
    2. "typescript.tsdk": "./node_modules/typescript/lib"
    3. }

    2、TS特点

  • 为JS提供可选的类型系统。

  • 兼容当前及未来的JS特性。

    类型系统

    可提高代码的质量和可维护性。
    1)有利于代码的重构,有利于编译器在编译时而不是运行时捕获错误。
    2)是出色的文档之一,函数签名是一个定理,而函数体是一个具体的实现。
    3)JS即TS
    TS为JS提供了编译时的类型安全,.js文件可以被重命名为.ts文件
    4)类型错误不会阻止JS的正常运行
    为方便JS代码迁移到TS,即使存在某些编译错误,也能被编译成JS代码。
    5)TS包含JS,是编译器或者VS可以使用的文档。

    二、JS

    1、相等

    =====

  • JS会发生隐式转换:

    1. console.log("" == "0") // false
    2. console.log("" == 0) // true
    3. console.log("" === "0") // false
    4. console.log("" === 0) // false
  • TS不具有隐式转换,string类型与number类型相等比较时,都会在编译时报错。

对象是否相等

  • 使用deep-equal的npm包

安装命令:npm install deep-equal
使用方法:import * as deepEqual from "deep-equal";
console.log(deepEqual({a: 123},{a: 123})); // true

2、引用

  • 除字面量外,JS中的任何对象(包括函数、数组、正则表达式等)都是一个引用。即一个改变,引用过它的地方都会发生改变(类似浅拷贝?)。

    字面量:

    数组字面量:["one","two","three",...]

    • 若在顶层(全局)使用字面量创建数组,JS将在每次对包含该组字面量的表达式求值时解释该数组。
    • 在函数中使用的数组,将在每次调用函数时都会被创建一次。
    • 数组字面量中多余的逗号:1、若在中间连写两个,,则这个没被指定的元素的初始值是undefined。2、如果在元素列表末尾添加了一个逗号,它将会被忽略。(且尾部的逗号早期版本的浏览器不支持)。3、如果在元素列表里添加两个及以上逗号,只会忽略最后一个。例:var myList = ['home', , 'school', , ];长度为4
    • 建议将缺失的元素显式的命名为undefined,增加可维护性。

布尔字面量:truefalse

  • 布尔对象(Boolean)是对象对布尔值的包装,即Boolean对象是一个布尔值的对象包装器。
    • false: 0、-0、null、false、NaN、undefined,""
    • true:其他值,包括空对象,空数组,字符串等
  • 布尔字面量就是布尔对象的值。

整数字面量:

  • 十进制
  • 十六进制(基数为16,0x或者0X开头,可包含数字 0~9 和字母 a~f(A~F))
  • 八进制(基数为8,0(或0O、0o,严格模式下只能以这两个)开头,只能包括数字0~7)
  • 二进制(基数为2,以0b(或0B)开头,只能包含数字0和1)

浮点数字面量

  • 指数部分以“e”或“E”开头,至少有一位数字,而且必须带小数点或者e(E)
  • [(+|-)][digits][.digits][(E|e)[(+|-)]digits]
  • 3.14 -.2345789 // -0.23456789 -3.12e+12 // -3.12*1012 .1e-23 // 0.1*10-23=10-24=1e-24

对象字面量:{键:值,...}

  • 如果对象的属性名字不合法,则必须用""包裹,且不能通过.访问,需要通过类数组标记[]访问和赋值。合理的属性名字也需要通过添加""来访问:

    1. var foo = {a: "alpha", 2: "two"};
    2. console.log(foo.a); // alpha
    3. console.log(foo[2]); // two
    4. //console.log(foo.2); // SyntaxError: missing ) after argument list
    5. //console.log(foo[a]); // ReferenceError: a is not defined
    6. console.log(foo["a"]); // alpha
    7. console.log(foo["2"]); // two

    RegExp字面值
    字符串字面量

  • 用单引号或双引号或者模板字符串括起来的零个或多个字符。

  • JS会自动将字符串字面值转换成一个临时字符串对象,调用字符串对象的方法,然后废弃那个临时的字符串对象。

**