新特性:模板字元串 傳統字元串 es6簡潔的字元串拼接 對比兩段拼接的代碼,模板字元串使得我們不再需要反覆使用雙引號(或者單引號)了;而是改用反引號標識符(`),插入變數的時候也不需要再使用加號(+)了,而是把變數放入${ }即可。 使用時要註意 1、可以定義多行字元串 傳統的多行字元串寫法: 模板 ...
新特性:模板字元串
傳統字元串
let name = "Jacky"; let occupation = "doctor"; //傳統字元串拼接 let str = "He is "+ name +",he is a "+ occupation;
es6簡潔的字元串拼接
let name = "Jacky"; let occupation = "doctor"; //模板字元串拼接 let str = `He is ${name},he is a ${occupation}`;
對比兩段拼接的代碼,模板字元串使得我們不再需要反覆使用雙引號(或者單引號)了;而是改用反引號標識符(`),插入變數的時候也不需要再使用加號(+)了,而是把變數放入${ }即可。
使用時要註意
1、可以定義多行字元串
傳統的多行字元串寫法:
let str = "write once ," + "run anywhere";
模板字元串的寫法:
let str = `write once ,
run anywhere`;
直接換行即可,但是要註意的是:所有的空格和所進都會被保留在輸出中。如果控制台輸出字元串str的話,代碼上換了行,控制台輸出的時候也會換行。
2、${ }中可以放任意的javascript表達式
${ }中可以是運算表達式
var a = 1; var b = 2; var str = `the result is ${a+b}`; //進行加法運算 結果:the result is 3
${ }中可以是對象的屬性
var obj = {"a":1,"b":2}; var str = `the result is ${obj.a+obj.b}`; //對象obj的屬性 //結果:the result is 3.
${ }中可以是函數的調用
function fn() { return 3; } var str = `the result is ${ fn() }`; //函數fn的調用,結果:the result is 3
標簽模板
這裡的模板指的是上面講的字元串模板,用反引號定義的字元串;而標簽,則指的是一個函數,一個專門處理模板字元串的函數。
var name = "張三"; var height = 1.8; tagFn`他叫${name},身高${height}米。`; //標簽+模板字元串 //定義一個函數,作為標簽 function tagFn(arr,v1,v2){ console.log(arr); //結果:[ "他叫",",身高","米。" ] console.log(v1); //結果:張三 console.log(v2); //結果:1.8 }
以上代碼有兩處要仔細講解的,首先是tagFn函數,是我們自定義的一個函數,它有三個參數分別是arr,v1,v2。函數tagFn的調用方式跟以往的不太一樣,以往我們使用括弧( )表示函數調用執行,這一次我們在函數名後面直接加上一個模板字元串,如下麵的代碼:
tagFn`他叫${name},身高${height}米。`;
這樣就是標簽模板,你可以理解為標簽函數+模板字元串,這是一種新的語法規範。
接下來我們繼續看函數的3個參數,從代碼的列印結果我們看到它們運行後對應的結果,arr的值是一個數組:[ "他叫" , ",身高" , "米。" ],而v1的值是變數name的值:“張三”,v2的值是變數height的值:1.8。
你是否看出規律了:第一個參數arr是數組類型,它是內容是模板字元串中除了${ }以外的其他字元,按順序組成了數組的內容,所以arr的值是[ "他叫", ",身高" , "米。" ];第2,3個參數則是模板字元串中對應次序的變數name和height的值。
標簽模板是ES6給我們帶來的一種新語法,它常用來實現過濾用戶的非法輸入和多語言轉換,這裡不展開講解。因為一旦我們掌握了標簽模板的用法後,以後就可以好好利用它的這個特性,再根據自己的需求要來實現各種功能了。
ES6新的String函數
repeat( )函數:將目標字元串重覆N次,返回一個新的字元串,不影響目標字元串。
var name1 = "王漢炎"; //目標字元串 var name2 = name1.repeat(3); //變數name1被重覆三次; console.log(name1); //結果:王漢炎 console.log(name2); //結果:王漢炎王漢炎王漢炎
includes( )函數:判斷字元串中是否含有指定的子字元串,返回true表示含有和false表示未含有。第二個參數選填,表示開始搜索的位置。
var name = "王漢炎"; //目標字元串 name.includes('炎'); //true, 含有 name.includes('web'); //false, 不含有 name.includes('王',1); //false, 從第2個字元開始搜索, 不含有
傳統的做法我們可以藉助indexOf( )函數來實現,如果含有指定的字元串,indexOf( )函數就會子字元串首次出現的位置,不含有,則返回-1。我們通過返回值是否為-1來判斷字元串中是否含有指定的子字元串,但是,我們現在可以用includes( )函數代替indexOf( )函數,因為它的返回值更直觀(true或false),況且我們並不關心子字元串出現的位置。
startsWith( )函數:判斷指定的子字元串是否出現在目標字元串的開頭位置,第二個參數選填,表示開始搜索的位置。
var name = "王漢炎"; //目標字元串 name.startsWith('王'); //true,出現在開頭位置 name.startsWith('漢'); //false,不是在開頭位置 name.startsWith('漢',1); //true,從第2個字元開始
endsWith( )函數:判斷子字元串是否出現在目標字元串的尾部位置,第二個參數選填,表示針對前N個字元。
var name = "我就是王漢炎"; //目標字元串 name.endsWith('我'); //false,不在尾部位置 name.endsWith('炎'); //true,在尾部位置 name.endsWith('炎',5); //false,只針對前5個字元 name.endsWith('炎',6); //true,針對前6個字元
javascript中,一個字元固定為2個位元組,對於那些需要4個位元組存儲的字元,javascript會認為它是兩個字元,此時它的字元長度length為2。如字元:"