TypeScript快速筆記(二)

1) TypeScript中的判斷語句,能夠使用非0值表明true。如:app

 1 function add1(a: number, b?:number): number{ // 注意b是可選參數
 2     console.log("parm1(a): " + a, "parm2(b): " + b);
 3     if(b){// 可選參數b,若是沒有傳參,值爲undefined
 4         return a + b;
 5     }
 6     else{
 7         return a;
 8     }
 9 }
10 console.log(add1(10, 20)); // a: 10, b: 20
11 console.log(add1(25)); // a: 25, b: undefined
12 
13 var num: number = 5;
14 if (num){
15     console.log('非0就是true') // 執行
16 }
17 num = 0;
18 if (num){
19     console.log('Test'); // 不會執行
20 }
21 
22 if (null){
23     console.log('null') // 不會執行
24 }
25 if (undefined){
26     console.log('undefined') // 不會執行
27 }
非0判斷

2)函數的定義有多種:無參函數,有參函數,可選函數,默認參數(與C/C++相似),剩餘參數(相似於C/C++的可變參數),匿名函數,構造函數,遞歸函數,Lambda函數ide

 

普通參數的定義方式:函數

function functionName(){}
function functionName(parm1: [type], parm2: [type]): returnType{}

 可選參數的定義方式:測試

function functionName(parm1:[type], parm2?: [type]): returnType{} // 在可選參數後面加‘?’

實例:優化

 1 console.log("普通參數測試:");
 2 function add(a: number, b: number): number{
 3     return a + b;
 4 }
 5 
 6 console.log(add(5, 7));
 7 
 8 // 可選參數,當沒有傳進可選參數時,參數值爲undefined
 9 console.log("可選參數測試:");
10 function add1(a: number, b?:number): number{
11     console.log("parm1(a): " + a, "parm2(b): " + b);
12     if(b){// 可選參數b,若是沒有傳參,值爲undefined
13         return a + b;
14     }
15     else{
16         // NaN表明一個非數字值
17         console.log(isNaN(a + b)); // true
18         console.log(isNaN(undefined)); // true
19         console.log(isNaN(null)); // false, null不是NaN值
20 
21         return a;
22     }
23 }
24 
25 console.log(add1(10, 20));
26 console.log(add1(25));
27 
28 
29 // 剩餘參數
30 console.log("剩餘參數測試:");
31 function sum(...num: number[]){
32     let sum: number = 0;
33     let resultString: string = '';
34     for(let i = 0; i < num.length; ++i){
35         sum += num[i];
36         resultString += num[i];
37         if (i + 1 < num.length)
38             resultString += ' + ';
39         else
40             resultString += ' = ';
41     }
42     resultString += sum;
43     console.log(resultString);
44     return sum;
45 }
46 
47 sum(1,2,3,4,5);
48 
49 //匿名函數
50 // 除了沒有函數名外,其餘的與標準函數同樣。將匿名函數賦值給一個變量,這種表達式就成爲函數表達式。
51 var res = function(a: number, b: number): number{
52     return a + b;
53 }
54 
55 console.log(res(1, 5));
56 
57 // 匿名函數自調用,在函數後面加個圓括號便可
58 (function(){
59     console.log("Hello World!");
60 })();
函數

結果:spa

普通參數測試:
12
可選參數測試:
parm1(a): 10 parm2(b): 20
30
parm1(a): 25 parm2(b): undefined
true
true
false
25
剩餘參數測試:
1 + 2 + 3 + 4 + 5 = 15
6
Hello World!
函數實例輸出結果

補充:關於重載函數,除了使用any,也能夠使用聯合類型,即:function disp(x:string|number,y?:string|number):void{}3d

 3)TypeScript中的重載不是真正意義的重載,不能想C++/C#等方式直接重載,不然編譯時會出現報錯:TS2396: Duplicate function implementation.code

  TypeScript重載方式:orm

    *若是參數類型不一樣,則參數類型應設置爲 any對象

    *參數數量不一樣你能夠將不一樣的參數設置爲可選。

 1 // 函數重載
 2 function disp(s1:string):void;  // 先聲明重載函數可是不定義(函數簽名)
 3 function disp(n1:number,s1:string):void;
 4 function disp(s1:string,n1:number):void;
 5  
 6 // 根據函數重載方式的實際狀況,函數體的類型判斷也能夠作出優化
 7 function disp(x:any,y?:any):void { // 經過any類型和可選參數實現重載
 8     if(typeof(x) == "string" && typeof(y) == "undefined"){
 9         console.log('(string): ' + x);
10     }
11     else if(typeof(x) == 'number' && typeof(y) == 'string'){
12         console.log('(number, string):' + x + ',' + y);
13     }
14     else if(typeof(x) == 'string' && typeof(y) == 'number'){
15         console.log('(string, number):' + x + ',' + y);
16     }
17 } 
18 disp("abc"); // 輸出:(string): abc
19 disp(1,"xyz"); // 輸出:(number, string):1,xyz
20 disp("hello", 100); // 輸出:(string, number):hello,100
21 //disp(1, 1); // 類型不匹配會報錯:TS2345: Argument of type '1' is not assignable to parameter of type 'string'.
函數重載

4)Number對象是原始數值number的包裝對象,封裝了更多的方法。

 1 // Number對象測試
 2 // Number對象是原始數值的包裝對象
 3 var num1: number = 100;
 4 var num2 = new Number(num1); 
 5 var num3 = new Number('123'); // 能夠接受字符串轉換
 6 var num4 = new Number(null); // 0
 7 var num5 = new Number('0xA'); // 十六進制,等於十進制的10
 8 var num6 = new Number('123a'); //  若是一個參數值不能轉換爲一個數字將返回非數字值 NaN (Not a Number)
 9 
10 console.log('Test typeof:');
11 console.log(typeof num1); // 輸出:number
12 console.log(typeof num2); // Number是一個對象,輸出:object
13 console.log(typeof num3); // 輸出:object
14 console.log(typeof num4); // 輸出:object
15 console.log(typeof num5); // 輸出:object
16 console.log(typeof num6); // 輸出:object
17 
18 console.log('Value test:');
19 console.log(num1.toString()); // 100
20 console.log(num2.toString()); // 100
21 console.log(num3.toString()); // 123
22 console.log(num4.toString()); // 0
23 console.log(num5.toString()); // 10
24 console.log(num6.toString()); // NaN
25 
26 //console.log(num2 + num3); 編譯錯誤,TS2365: Operator '+' cannot be applied to types 'Number' and 'Number'.
number類型和Number對象測試
相關文章
相關標籤/搜索