一、准备
1、准备工作
TS编译器。
OSS(Open Source Software,开源软件)
安装
npm install typescript@next
使用:在vscode的
.vscode/settings.json
来使用这个版本。{
"typescript.tsdk": "./node_modules/typescript/lib"
}
2、TS特点
为JS提供可选的类型系统。
-
类型系统
可提高代码的质量和可维护性。
1)有利于代码的重构,有利于编译器在编译时而不是运行时捕获错误。
2)是出色的文档之一,函数签名是一个定理,而函数体是一个具体的实现。
3)JS即TS
TS为JS提供了编译时的类型安全,.js
文件可以被重命名为.ts
文件
4)类型错误不会阻止JS的正常运行
为方便JS代码迁移到TS,即使存在某些编译错误,也能被编译成JS代码。
5)TS包含JS,是编译器或者VS可以使用的文档。二、JS
1、相等
==
和===
JS会发生隐式转换:
console.log("" == "0") // false
console.log("" == 0) // true
console.log("" === "0") // false
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
,增加可维护性。
布尔字面量:true
和false
- 布尔对象(
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
对象字面量:{键:值,...}
如果对象的属性名字不合法,则必须用
""
包裹,且不能通过.
访问,需要通过类数组标记[]
访问和赋值。合理的属性名字也需要通过添加""
来访问:var foo = {a: "alpha", 2: "two"};
console.log(foo.a); // alpha
console.log(foo[2]); // two
//console.log(foo.2); // SyntaxError: missing ) after argument list
//console.log(foo[a]); // ReferenceError: a is not defined
console.log(foo["a"]); // alpha
console.log(foo["2"]); // two
RegExp字面值
字符串字面量用单引号或双引号或者模板字符串括起来的零个或多个字符。
- JS会自动将字符串字面值转换成一个临时字符串对象,调用字符串对象的方法,然后废弃那个临时的字符串对象。
**