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 }
2)函數的定義有多種:無參函數,有參函數,可選函數,默認參數(與C/C++相似),剩餘參數(相似於C/C++的可變參數),匿名函數,構造函數,遞歸函數,Lambda函數ide
普通參數的定義方式:函數
可選參數的定義方式:測試
實例:優化
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'.