es6 字串String的擴充(執行個體講解),es6string

來源:互聯網
上載者:User

es6 字串String的擴充(執行個體講解),es6string

新特性:模板字串

傳統字串

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。如字元:"𠮷",就是一個需要4個位元組儲存,length為2的字元。這會有什麼問題呢?對於4位元組的字元, javascript無法正確讀取字元,我們來試試看。

var str1 = "前端";var str2 = "𠮷";str1.length; //length為2str2.length; //length為2str1.charAt(0); //前str1.charAt(1); //端str2.charAt(0); //'�'str2.charAt(1); //'�'

可以看到,str1和str2的長度length都是2,因為字元:"𠮷"是一個4位元組的字元,使用charAt函數(charAt() 方法可返回指定位置的字元)能正確讀取字串str1的字元,但無法正確讀取4個位元組的字元,此時返回結果出現了亂碼。

但是,如果我們使用ES6給我們提供的codePointAt( )函數,就可以處理這種4個位元組的字元了,我們來看看怎麼使用

var str = "𠮷";str.codePointAt(); //結果:134071

對於這個長度length為2字元:"𠮷",codePointAt( )方法可以正確地識別出它是個4個位元組的字元,並且能正確地返回它的碼點的十進位數:134071,這個數字抓換成16進位就是20bb7,對應的Unicode編碼則是\u20bb7。

String.fromCodePoint( )函數:函數的參數是一個字元對應的碼點,返回的結果就是對應的字元,哪怕這個字元是一個4位元組的字元,也能正確實現。

正好可以利用上面得到的10進位數字134071反推一下。

String.fromCodePoint(134071); //結果:"𠮷"
String.raw( )函數;看函數名raw是未加工的的意思,正如這個函數的作用一樣:返回字串最原始的樣貌,即使字串中含有轉義符,它都視而不見,直接輸出。

 console.log(`hello\nworld`);//輸出:helloworld console.log(String.raw`hello\nwolrd`);//輸出:hello\nwolrd

總結:ES6給字串帶來了很多實用性的擴充:模板字串,標籤模板,repeat函數、includes函數,startsWith函數,endsWith函數,codePointAt函數,String.fromCodePoint函數,String.raw函數。

以上這篇es6 字串String的擴充(執行個體講解)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援幫客之家。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.