ES6 2

4.延展參數(shù)處理 Extended Parameter Handling

這部分內(nèi)容主要針對的是函數(shù)傳值形參的變化,主要是形參默認(rèn)值和Rest參數(shù)
首先是形參帶默認(rèn)值比較好理解,就是在定義函數(shù)的時候給形參一個默認(rèn)值

function test(x, y = 7, z = 42) { 
    return x + y + z;
}

這樣y和z就有一個初始的默認(rèn)值,這個比較簡單,也比較常用

接下來要說Rest參數(shù)首先要先說一個耳熟能詳?shù)膶ο骯rguments
這個對象的使用跟數(shù)組使用基本一致,也是通過下標(biāo)來訪問,也一度讓我認(rèn)為,這個屌絲的屬性是一個數(shù)組,但是遺憾的是,這屌絲屬性是一個對象

function test(){
    console.log(arguments);
    console.log(typeof arguments);
   }
test(1, 2, 3, 4);
// 打印結(jié)果
[1, 2, 3, 4]
object

調(diào)用傳值和形參個數(shù)不對等的時候,或者回調(diào)函數(shù)不明確回調(diào)的參數(shù)的時候arguments這個屬性確實好用,能幫助使用者快速的熟悉并使用函數(shù),在ES6之后,有了Rest參數(shù)

function test(x, y, ...a){
    console.log("x :"+x + ";y :"+y);
    console.log(a);
    console.log(typeof a);
   }
   test(1, 2, 3, 4);
// 打印結(jié)果
x :1;y :2
[3, 4]
object

形參x,y都被賦值,剩下的多余的值,統(tǒng)一放到另一個形參a上,只是,這個形參前有"...",那"...a"就是Rest參數(shù),這個參數(shù)也是一個對象,用法也是和數(shù)組一樣.

當(dāng)然了,這個Rest參數(shù)還有其他的用法,比如能拆分字符串,拆分成一個數(shù)組,每個元素是字符串對應(yīng)字符

var str = "test";
// ES6
var arr = [...str];

// ES5
var arr = str.split("");
console.log(arr);
// 結(jié)果
["t", "e", "s", "t"]

也能用在兩個數(shù)組的拼接

var arr1 = ["吳用", "公孫勝", "關(guān)勝"];
// ES6
var arr2 = ["宋江", "盧俊義", ...arr1];
// ES5
var arr2 = ["宋江", "盧俊義"].concat(arr1);
console.log(arr2);
// 打印結(jié)果
["宋江", "盧俊義", "吳用", "公孫勝", "關(guān)勝"]

相對能簡單一點,這就是Rest參數(shù)的用法

5.模板字符串 Template Literals

(1).字符串填補 String Interpolation
這部分主要是對字符串進行插入的變化,以前字符串拼接都用"+", 把每一個要拼接的字符串都拼接起來,對很多初學(xué)者來講,很難,而且非常不靈活,在ES6提出了一種新的拼接方法,這種方法使用類似PHP的字符串的拼接

var stu = {
    name: "張三",
    num:17
}
var score = {
    english : 100,
    math : 80
}
var message = \`Hello ${stu.name}, 學(xué)號:${stu.num} ,數(shù)學(xué): ${score.math}, 英語:${score.english}\`;
console.log(message);
// 打印結(jié)果
Hello 張三, 學(xué)號:17 ,數(shù)學(xué): 80, 英語:100

這種寫法照比之前用"+"憑借確實節(jié)省代碼,但是不同于PHP的拼接,JS的這種寫法既不是單引號也不是雙引號,而是``,就是鍵盤上1那個按鍵左邊的按鍵,反引號`,所以使用的時候需要注意一下,如果不是對應(yīng)符號,沒有效果.

(2)自定義插值 Custom Interpolation
在函數(shù)傳值上也發(fā)生了變化

function get(){
console.log(arguments);
}
var str1 = "1111";
var str2 = "3333";
// ES5
get([ "http://example.com/foo?str1=", "&str2=", "" ],str1, str2);
// ES6
get\`http://example.com/foo?str1=${str1}&str2=${str2}\`;

函數(shù)調(diào)用有了很大的變化,這兩種寫法arguments打印出來的內(nèi)容相同,第一個參數(shù)是一個數(shù)組,后兩個參數(shù)是str1和str2兩個字符串的內(nèi)容,因為node.js完全兼容ES6的寫法,所以見到這種寫法需要認(rèn)識.

(3)Raw String Access 原始字符串的訪問
在模板字符串里,有了一個新的方法,String.raw(),這是一個靜態(tài)方法,他用于獲取模板字符串的原始字符串形式.

console.log(String.raw \`foo\n${42}bar\`); 
console.log(\`foo\n${42}bar\`);
console.log(String.raw\`Hi\u000A!\`);
console.log(\`Hi\u000A!\`);

第一個打印會把模板字符串原樣的打印出來,也就是\n不會進行換行操作,第二個打印則會\n進行換行操作,下面的例子也差不多.下面的例子是模板字符串作為參數(shù).

function test() {
    console.log(arguments);
    console.log(arguments[0]); // ["foo", "bar", raw: Array[2]]
}
test \`foo${ 42 }bar\`;

打印arguments之后,arguments分為兩部分,第一部分是一個數(shù)組,第二部分是42這個值,打印第一個參數(shù)數(shù)組,多個了raw,這個raw也是一個數(shù)組.用法如下:

function test(result, ...val) {
    console.log(result[0]);
    console.log(result.raw[0]); // 結(jié)果相同
    console.log(val[0]) // 42
}
test `foo${ 42 }bar`;

6.擴展字符串 Extended Literals

這部分主要是進制和Unicode這部分的功能性的擴展
(1)二進制和八進制字符串 Binary & Octal Literal

// ES6
// 二進制
console.log(0b111110111);
// 八進制
console.log(0o767);
// ES5
parseInt("111110111", 2);
parseInt("767", 8);

ES5可以在parseInt的第二個參數(shù)設(shè)置進制,16進制也可以.

(2)Unicode字符串和正則表達(dá)式 Unicode String & RegExp Literal
Unicode中的中文有20902字,范圍在4E00-9FA5之間,用法"\u4E00",內(nèi)容就是"一",在ES6里能直接使用16進制的數(shù)找到對應(yīng)的字符

"??".codePointAt(0);
"??" === "\u{20BB7}";

這部分沒有什么太多的東西

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,679評論 0 4
  • ECMAScript 6(以下簡稱ES6)是JavaScript語言的下一代標(biāo)準(zhǔn)。因為當(dāng)前版本的ES6是在2015...
    芹菜斯_嘉麗閱讀 286評論 0 1
  • 使用簡書第一天,心血來潮下載,不知道能堅持多少天。 高中大學(xué)時期還能堅持寫日記,畢業(yè)后動筆都成了難上加難得事情。 ...
    且北閱讀 113評論 0 0
  • ABO 血型由紅細(xì)胞表面的ABO 抗原決定。 A 型血母親紅細(xì)胞表面抗原為A(AO/AA),血清中抗體為anti-...
    Max狗狗狗閱讀 860評論 0 2
  • 書,可以不急于一時讀完,甚至有的書擱了許多年再看也沒關(guān)系。 許多需要多讀、細(xì)讀的好書,我都是直接買來看的。以至于現(xiàn)...
    寒甕閱讀 443評論 0 0

友情鏈接更多精彩內(nèi)容