1.声明变量: TypeScript 遵循强类型,如果将不同的类型赋值给变量会编译错误
var [变量名] : [类型] = 值;
var uname:string = "Runoob";
// 声明变量的类型,但没有初始值,变量值会设置为 undefined:
// 声明变量并初始值,但不设置类型,该变量可以是任意类型:
// 声明变量没有设置类型和初始值,类型可以是任意类型,默认初始值为 undefined:
注意: 变量不要使用 name 否则会与 DOM 中的全局 window 对象下的 name 属性出现了重名。!!!!
2.类型断言: 允许变量从一种类型更改为另一种类型
var str = '1'
var str2:number = <number> <any> str //str、str2 是 string 类型
console.log(str2)
js中编译如下代码:
var str = '1';
var str2 = str; //str、str2 是 string 类型
console.log(str2); // 1
// 当类型没有给出时,TypeScript 编译器利用类型推断来推断类型。
// 如果由于缺乏声明而不能推断出类型,那么它的类型被视作默认的动态 any 类型。
3.变量作用域
// 和其他语言很相似
var global_num = 12 // 全局变量
class Numbers {
num_val = 13; // 实例变量
static sval = 10; // 静态变量
storeNum():void {
var local_num = 14; // 局部变量
}
}
console.log("全局变量为: "+global_num)
console.log(Numbers.sval) // 静态变量
var obj = new Numbers();
console.log("实例变量: "+obj.num_val)
// 会被js编译为-------------------------- 不重要
var global_num = 12; // 全局变量
var Numbers = /** @class */ (function () {
function Numbers() {
this.num_val = 13; // 实例变量
}
Numbers.prototype.storeNum = function () {
var local_num = 14; // 局部变量
};
Numbers.sval = 10; // 静态变量
return Numbers;
}());
console.log("全局变量为: " + global_num);
console.log(Numbers.sval); // 静态变量
var obj = new Numbers();
console.log("实例变量: " + obj.num_val);
4.TypeScript 运算符 关系运算符 逻辑运算符 短路运算符(&& 与 ||) 位运算符
5.类型运算符 : typeof 是一元运算符,返回操作数的数据类型
var num = 12
console.log(typeof num); //输出结果: number
instanceof 运算符用于判断对象是否为指定的类型
class Person{ }
var obj = new Person()
var isPerson = obj instanceof Person;
console.log("obj 对象是 Person 类实例化来的吗? " + isPerson);
6.函数定义
function () {
// 函数定义
console.log("调用函数")
}
// return_type 是返回值的类型。!!!!!!!!!
// 函数的返回值: 返回值的类型需要与函数定义的返回类型(return_type)一致
function function_name():return_type {
// 语句
return value;
}
// 例如:
function greet():string { // 返回一个字符串
return "Hello World"
}
// 多个参数,每个参数使用逗号 , 分隔:
// param1、param2 为参数名。 datatype 为参数类型。
function func_name( param1 [:datatype], param2 [:datatype]) {
}
// 例如:
function add(x: number, y: number): number {
return x + y;
}
console.log(add(1,2))
// 多个可选参数,<= 参数个数,否则报错
function buildName(firstName: string, lastName?: string) {
if (lastName)
return firstName + " " + lastName;
else
return firstName;
}
let result1 = buildName("Bob"); // 正确
let result2 = buildName("Bob", "Adams", "Sr."); // 错误,参数太多了
let result3 = buildName("Bob", "Adams"); // 正确
// 默认参数
function function_name(param1[:type],param2[:type] = default_value) {
}
// 例如:
function calculate_discount(price:number,rate:number = 0.50) {
var discount = price * rate;
console.log("计算结果: ",discount);
}
calculate_discount(1000)
calculate_discount(1000,0.30)
// 传入不确定的参数------剩余参数
function buildName(firstName: string, ...restOfName: string[]) {
return firstName + " " + restOfName.join(" ");
}
let employeeName = buildName("Joseph", "Samuel", "Lucas", "MacKinzie");
// 例如:
function addNumbers(...nums:number[]) {
var i;
var sum:number = 0;
for(i = 0;i<nums.length;i++) {
sum = sum + nums[i];
}
console.log("和为:",sum)
}
addNumbers(1,2,3)
addNumbers(10,10,10,10,10)
// 匿名函数:
var res = function( [arguments] ) { ... }
var msg = function() {
return "hello world";
}
console.log(msg())
// 匿名函数自调用
(function () {
var x = "Hello!!";
console.log(x)
})()
// 构造函数
var res = new Function ([arg1[, arg2[, ...argN]],] functionBody)
// arg1, arg2, ... argN:参数列表。
// functionBody:一个含有包括函数定义的 JavaScript 语句的字符串。
var myFunction = new Function("a", "b", "return a * b");
var x = myFunction(4, 3);
console.log(x);
// Lambda 函数 (箭头函数。)
var foo = (x:number)=>10 + x
console.log(foo(100))
// 函数重载: 重载是方法名字相同,而参数不同,返回类型可以相同也可以不同。必须有一个独一无二的参数类型列表.
// 以下实例定义了参数类型与参数数量不同:
function disp(s1:string):void;
function disp(n1:number,s1:string):void;
function disp(x:any,y?:any):void {
console.log(x);
console.log(y);
}
disp("abc")
disp(1,"xyz");
7.string对象属性
1.constructor—对创建该对象的函数的引用
var str = new String( "This is string" );
console.log("str.constructor is:" + str.constructor)
// 输出结果:str.constructor is:function String() { [native code] }
2.length—
3.prototype-----允许您向对象添加属性和方法。
8.Array数组
var array_name[:data type] = [val1,val2…valn]
// 例如:
var numlist:number[] = [2,4,6,8]
9.Array 对象: Array 对象的构造函数接受以下两种值:表示数组大小的数值。初始化的数组列表,元素使用逗号分隔值。
var arr_names:number[] = new Array(4)
for(var i = 0; i<arr_names.length; i++) {
arr_names[i] = i * 2
console.log(arr_names[i])
}
// 直接初始化数组元素:
var sites:string[] = new Array("Google","Runoob","Taobao","Facebook")
for(var i = 0;i<sites.length;i++) {
console.log(sites[i])
}
10.数组解构:
var arr:number[] = [12,13]
var[x,y] = arr
11.数组迭代
var j:any;
var nums:number[] = [1001,1002,1003,1004]
for(j in nums) {
console.log(nums[j])
}
// 转换成js代码:
var j;
var nums = [1001, 1002, 1003, 1004];
for (j in nums) {
console.log(nums[j]);
}
// 多维数组
var multi:number[][] = [[1,2,3],[23,24,25]]