ES6 基礎 - 01

1.什麼是ES 6:

    ES 6 全稱 ECMAScript 6.0,也叫 ES 2015,它是2015年6月發佈的,是JavaScript語言的下一代標準,它的目標,是使得JavaScript語言可以用來編寫複雜的大型應用程序,成爲企業級開發語言。

    ECMAScript 和 JavaScript 的關係:前者是後者的規格,後者是前者的一種實現。

2.瀏覽器對ES6的支持:

    ES6提供了許多新的特性,但並不是所有的瀏覽器都能夠完美支持,附一段桌面端瀏覽器對ES6的支持情況:

  • Chrome51 版起便可以支持 97% 的 ES6 新特性。
  • Firefox53 版起便可以支持 97% 的 ES6 新特性。
  • Safari10 版起便可以支持 99% 的 ES6 新特性。
  • IEEdge 15可以支持 96% 的 ES6 新特性。Edge 14 可以支持 93% 的 ES6 新特性。(IE7~11 基本不支持 ES6

3.ES6的一些新特性:

    (1)let :用來聲明變量,同 var 一樣;

let a = 123;
console.log(a)    //輸出123

    * let 和 var 的區別

{ 
     var a = 123;
     console.log(a)    //輸出123
     let b = 456; 
     console.log(b)    //輸出456
}
console.log(a);   //輸出123
console.log(b);   //報錯 

    區別1:var 具有全有作用域和局部作用域,而 let 具備塊級作用域,也就是只有在代碼塊內才能進行輸出,比如{ },if,for....

console.log(a)   //輸出undefined
var a = 123;
console.log(b);    //報錯
let b = 123;

    區別2:var 是具有變量聲明提升的,而 let 不允許變量聲明提升;

var a = 10;
var a = 123;
console.log(a)    //輸出123,就近原則
let b = 10;
let b = 123;
console.log(b)    //直接報錯

    區別3:var 是可以重複聲明的,而 let 不允許重複聲明;

//舉一個例子:點擊以下每個li中的數字,讓控制檯輸出其對應的數字,HTML代碼如下:
<ul>
   <li>0</li>
   <li>1</li>
   <li>2</li>
   <li>3</li>
   <li>4</li>
</ul>
//JavaScript代碼如下:
var lis = document.getElementsByTagName("li")
for(var i = 0;i < lis.length;i ++){
   (function(i){
       lis[i].onclick = function(){
           console.log(i)
       }
   })(i)
}
//注:如果不使用立即執行函數,控制檯只會輸出一個5
//當將 var 換成是 let 時
for(let i = 0;i < lis.length;i ++){
    lis[i].onclick = function(){
       console.log(i)
    }
} 
//此時控制檯就會正確輸出對應的數字,因爲使用let以後,循環體內部形成了各自單獨的作用域

    (2)const:聲明一個只讀的常量,一旦聲明,常量的值就不能改變;並且聲明之後,必須要賦值;

const A = 123;     //人爲規範:常量名全部使用大寫
A = 456;
console.log(A)    //直接報錯

    const 也是隻在聲明所在的塊級作用域中才有效,同時也不允許聲明提升和聲明重複;

    (3)字符串模板:

    在ES6以前,只能通過 "字符串" + 變量 + " 字符串" 來進行字符串的拼接過程,並且不能直接換行,若要換行必須要加 \ (反斜槓)進行換行,大大的增加了代碼量,而且容易出錯;

    在ES6中,是將變量放在${ }中,和字符串進行拼接,並且可以直接進行換行,書寫格式:` 字符串${變量} ` ;注意是 ` 符號;

//ES6以前
ar a = 123;
console.log('hello' + a)
//ES6中
let a = 123;
console.log(`hello${a}`)     //二者輸出結果一樣

    (4)字符串中的一些方法:

        includes:判斷字符串中是否含有該字符,若有,返回true,反之返回false;

var a = "hello";
console.log(a.includes("a"))     //輸出true

        repeat:獲取字符串並可以進行重複n次:

var b = "ha";
console.log(b.repeat(3))    //輸出hahaha

        startsWith 和 endsWith :判斷字符是否在字符串的頭部和末尾,返回布爾值:   

var a = "hello world!";
console.log(a.startsWith('h'));    //true
console.log(a.endsWith('!'))      // true

   (5)數組的一些擴展方法:

        先來看一下ES6以前的數組的複製,克隆:

var arr = [1,2,3];
var arr1 = arr;
console.log(arr == arr1)   //true
//二者之間進行比較,比較的是地址
arr1[0] = 5;    //將arr1中內容發生改變
console.log(arr == arr1)    //true
console.log(arr,arr1)    //二者都輸出523
//不管怎麼改變,它們的地址始終不會變,並且arr的值會根據arr1的改變而改變

var arr2 = [];
console.log(arr == arr2)    //false
//只有爲引用值時才能產生一個新的地址,也就是重新創建一個數組
for(var i = 0;i < arr.length;i ++){
     arr2.push(arr[i]);     //將arr中的值添加到arr2中
} 
console.log(arr2)   //523
arr2[0] = 2;    //進行arr2的值的改變
console.log(arr,arr2)    //輸出523 和 223
//這是數組的深度克隆,前者不會因爲後者的改變而改變

        再來看ES6中的數組的克隆:

//第一種 Array.form方法
var arr = [1,2,3];
var arr1 = Array.from(arr);
console.log(arr,arr1);    //結果相同,但地址不同
console.log(arr == arr1)    //false
//第二種:數組的超引用
var arr2 = [...arr];
console.log(arr == arr2);    //false

        ES6以前,類數組想要擁有數組中方法必須要加 Array.prototype....方法

function str(){
   console.log(arguments);       //arguments是獲取所有形參,它本身就是一個類數組
   arguments.push = Array.prototype.push;      //添加數組中push方法
   arguments.push(5);
   console.log(arguments)       //添加成功
}
str(1,2,3,4)

        在ES6中,簡化了代碼,並且直接以數組的形式輸出出來;

function str(...age){      //名字隨便定義,相當於獲取了所有的形參
   console.log(age);     //[1,2,3,4]
   age.push(5);        //直接使用數組中的方法
   console.log(age)     //[1,2,3,4,5]
}
str(1,2,3,4)    

 

發佈了35 篇原創文章 · 獲贊 20 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章