字符串新特性 (提高開發(fā)效率和代碼的辨識(shí)度)
- 多行字符串(定界符)
var tmpData = {
tmp_title : 'tmp_title',
content : 'tmp_content',
};
var tmpFoo = function(){
return 'tmp_content_two';
};
var tmp =`
<section id="box-wrap">
<h2>${tmpData.title}</h2>
<div>
<p>${ tmpData.content }</p>
<p>${ tmpFoo() }</p>
</div>
</section>
`;
alert(tmp);
- 自動(dòng)拆分字符串
var foo = function(template,name,age){
console.log(template);
console.log(name);
console.log(age);
}
const myName = "MF";
var getAge = function(){
return 99;
};
foo `My name is ${ myName }, I'm ${ getAge() }`;
參數(shù)類型
如果一個(gè)變量被指定了類型,再給變量賦值的時(shí)候,編輯器會(huì)根據(jù)類型做一些檢查,減少開發(fā)時(shí)犯錯(cuò)誤的幾率。
這里的檢查是靜態(tài)類型檢查,只是在ts的編譯器中提示錯(cuò)誤,并不意味著編譯后的js代碼中的變量變成了強(qiáng)類型。
var myName:string = "MF";
myName = 13;
以下的情況,編譯器同樣是會(huì)報(bào)錯(cuò)。因?yàn)榫幾g器的類型推斷機(jī)制。在聲明一個(gè)新變量時(shí)會(huì)做類型檢查,確定變量的類型。
var myName = "MF";
myName = 13;
如果不想限制新聲明的變量的類型,可以用any關(guān)鍵字聲明變量。
var myName:any = "MF";
myName = 13;
ts 支持的基本類型包括
- any
- string
- number
- boolean
- void (用于聲明函數(shù)的返回值)
var foo1 = function(): void{
return 'aaa';
}
var foo2 = function(): number{
return 'aaa';
}
var foo3 = function(arg:string): number{
return 111;
}
foo3(12);
自定義類型
class Person{
name: string;
age:number;
}
var mf :Person = new Person();
mf.name = 'mf';
mf.age = 99;
默認(rèn)參數(shù)(在參數(shù)聲明的后面用等號(hào)指定參數(shù)的默認(rèn)值)
var foo1 = function(a:string,b:string,c:string='ccc'){
console.log(a);
console.log(b);
console.log(c);
}
foo1('aaa','bbb');
var foo2 = function(a:string,b?:string,c:string='ccc'){
//可選參數(shù)不可以聲明在必選參數(shù)的前面
console.log(a);
console.log(b);
console.log(c);
}
foo2('aaa');
函數(shù)新特性
Rest and Spread 操作符(用來聲明任意數(shù)量的方法參數(shù))
function foo(...args){
//可以傳入任意數(shù)量的參數(shù)
args.forEach( (arg) => console.log(arg) );
}
foo(1,2,3);
//foo(4,5,6,7);
析構(gòu)表達(dá)式(通過表達(dá)式將對(duì)象或數(shù)組拆解成任意數(shù)量的變量)
function getStock(){
return {
code: 'google',
price:'100',
}
}
var {code:codeX,price} = getStock();
console.log(codeX);
console.log(price);
function getStock(){
return{
code:'google',
price: {
price1:200,
price2:400,
}
}
}
var {price:{ price2 } } = getStock();
console.log(price2);
//用析構(gòu)表達(dá)式從數(shù)組中取值
var array = [0,1,2,3,4];
var [num0,,num2] = array;
console.log(num0);
console.log(num2);
//var [, , num2, , ...others] = array;
//console.log(num2);
//console.log(others);
//用析構(gòu)表達(dá)式拆分?jǐn)?shù)組作為函數(shù)的參數(shù)
var array = [0,1,2,3,4];
function fn([num1,num2,...others]){
console.log(num1);
console.log(num2);
console.log(others);
}
fn(array);
for of 循環(huán)
var array = [0,1,2,3,4];
//for Each
array.forEach(i => console.log(i));
//for of
for(var i of array){
if(i> 2) break;
console.log(i)
}
//用for...of 拆分字符串
for(var n of 'uniplaza'){
console.log(n);
}
面向?qū)ο?/h2>
類的定義
class Person{
//類的構(gòu)造函數(shù)(只在類被實(shí)例化時(shí)調(diào)用一次)
constructor(public name:string){ }
// 訪問控制符 public(默認(rèn)),
// private ,
// protected(可以在類的內(nèi)部和子類里被訪問 )
//name;
run(){
console.log('I'm running');
}
}
var p1 = new Person();
p1.name = 'batman';
p1.run();
類的繼承 ( extend ,supper)
class Child extends Person{
constructor(name:string,id:number){
//super 關(guān)鍵字用于調(diào)用父類的構(gòu)造函數(shù)
super(name);
}
school;
goSchool(){
super.run();
console.log(school);
}
}
var c1 = new Child('yyy',0001121);
接口
泛型
模塊化
外部庫(kù)的引用
class Person{
//類的構(gòu)造函數(shù)(只在類被實(shí)例化時(shí)調(diào)用一次)
constructor(public name:string){ }
// 訪問控制符 public(默認(rèn)),
// private ,
// protected(可以在類的內(nèi)部和子類里被訪問 )
//name;
run(){
console.log('I'm running');
}
}
var p1 = new Person();
p1.name = 'batman';
p1.run();
class Child extends Person{
constructor(name:string,id:number){
//super 關(guān)鍵字用于調(diào)用父類的構(gòu)造函數(shù)
super(name);
}
school;
goSchool(){
super.run();
console.log(school);
}
}
var c1 = new Child('yyy',0001121);