ts是一种面向对象的语言,面向对象最重要的概念是类和对象。
对象:是类的实例,有状态和方法。
类:是描述类的行为和状态
举个例子:人分为两类 :class(男,女),而具体的每个人则是具体的object(小美,胡图图)
用ts定义一个类:
class dogs{
voice():void{
console.log('汪汪')
}
}
var dog = new dogs()
dog.voice()
编译后可以看js的代码,更容易理解:
var Dogs = /** @class */ (function () {
function Dogs() {
}
Dogs.prototype.voice = function () {
console.log('汪汪');
};
return Dogs;
}());
var obj = new Dogs();
obj.voice();
运行结果:
ts中的数据类型:
any,number,boolean,数组(元素类型加【】,或者使用数组泛型Arry<number>),
enum(定义数值集合),元组,void,null(空对象),undefined(没有值的变量),never。
元组:如果某个属性的值是表达式,那它的后一个成员就必须初始化值。否则会报错。
这里着重解释一下never,因为阅读文档过程中比较不好理解。
概念:never是其他类型的子类型,(可以类比空集是其他集合的子集)。
用法:一般用于定义一个无限循环的函数返回值类型,可以是抛出异常函数的返回值类型。
ts的变量声明:
TypeScript 变量的命名规则:
-
变量名称可以包含数字和字母。
-
除了下划线 _ 和美元 $ 符号外,不能包含其他特殊字符,包括空格。
-
变量名不能以数字开头。
声明变量:var [变量名] : [类型] = 值;
例如:
var unane:string = '胡图图';
如果不设置类型,则变量为任意类型。
如果不初始化,则默认值为undefined。
对了,就是变量不能用name命名,因为会与DOM中全局对象window中的name重名,报错。
函数实现重复。
这个问题的原因是,在vscode中,它把同一文件下的函数名相同的报错了。
解决方法:在同目录下创建一个名为tsconfig.json的文件即可。
类型断言
很好理解,就是将某个值从一种类型转化为另一种类型。
规则:当 S 类型是 T 类型的子集,或者 T 类型是 S 类型的子集时,S 能被成功断言成 T。
例子:
var uname = '12345'
var uname1 = <number><any>uname
console.log(uname1)
输出结果为:12345 类型是number
12345
变量作用域
变量作用域指定了变量定义的位置。
-
全局作用域 − 全局变量定义在程序结构的外部,它可以在你代码的任何位置使用。
-
类作用域 − 这个变量也可以称为 字段。类变量声明在一个类里头,但在类的方法外面。 该变量可以通过类的对象来访问。类变量也可以是静态的,静态的变量可以通过类名直接访问。
-
局部作用域 − 局部变量,局部变量只能在声明它的一个代码块(如:方法)中使用。
算术运算符
自增:a++和++a的问题。都是自增,但前者是先取值再自增,后者是自增再取值。
短路运算符(&& 与 ||)
注意有一个很妙的用法,短路,就是当一个条件符合时,另一个条件可以不运行。
类型运算符
typeof 运算符
typeof 是一元运算符,返回操作数的数据类型。
ts 的Number对象
Number对象是对原始值的包装对象。
注意,当你new出来一个Number对象时,需要传一个你控制的数,注意一定是一个数字,否则就会返回NaN。
下面是用法和一些例子:
var num = new Number(1.2345)
//一些静态变量的输出
//可以把这个Number对象,理解为一个类,然后直接用类名进行调用的变量叫做静态变量
console.log("TypeScript Number 属性: ");
console.log("最大值为: " + Number.MAX_VALUE);
console.log("最小值为: " + Number.MIN_VALUE);
console.log("负无穷大: " + Number.NEGATIVE_INFINITY);
console.log("正无穷大:" + Number.POSITIVE_INFINITY);
//Number对象的方法
//toExponential(),把对象的值转化为指数计数法
var num1 = 1225.30
var val = num1.toExponential();
console.log(val) // 输出: 1.2253e+3
//tofixed(),把数字转化为字符串,然后定位小数点后有几位。
var num3 = 177.234
console.log("num3.toFixed() 为 "+num3.toFixed()) // 输出:177
console.log("num3.toFixed(2) 为 "+num3.toFixed(2)) // 输出:177.23
console.log("num3.toFixed(6) 为 "+num3.toFixed(6)) // 输出:177.234000
// toLocaleString()
// 把数字转换为字符串,使用本地数字格式顺序。
var num = new Number(177.1234);
console.log( num.toLocaleString()); // 输出:177.1234
// toPrecision()
//把数字格式化为指定的长度。
var num = new Number(7.123456);
console.log(num.toPrecision()); // 输出:7.123456
console.log(num.toPrecision(1)); // 输出:7
console.log(num.toPrecision(2)); // 输出:7.1
//toString()
//把数字转换为字符串,使用指定的基数。数字的基数是 2 ~ 36 之间的整数。若省略该参数,则使用基数 10。
var num = new Number(10);
console.log(num.toString()); // 输出10进制:10
console.log(num.toString(2)); // 输出2进制:1010
console.log(num.toString(8)); // 输出8进制:12
//valueOf()
//返回一个 Number 对象的原始数字值