ES6基本語法

ES6基本語法html

一、let編程

(1)、let做用域只限於當前代碼塊數組

{
    let a = 12;
}
console.log(a);   //報錯,a不存在

(2)、let聲明的變量做用域不會被提高閉包

{
    console.log(a);  //報錯
    let a = 12;
}

(3)、在相同的做用域下不能聲明相同的變量函數

{
   let a = 10;
   let a = 11;  //報錯    
 }

(4)、for循環體現let的父子做用域this

//使用var聲明,須要用到「閉包」
    var btns = document.querySelectorAll("button");
      for(var i=0;i<btns.length;i++){
      (function(i){
           btns[i].onclick= function (){
            alert("點擊了"+i+"個按鈕")
          }
      })(i);
    }
    
    //let聲明
     let btns = document.querySelectorAll("button");
      for(let i=0;i<btns.length;i++){
          btns[i].onclick= function (){
            alert("點擊了"+i+"個按鈕")
          }
      }

二、const
(1)、const做用域只限於當前代碼塊
(2)、const聲明的變量做用域不會被提高
(3)、在相同的做用域下不能重複聲明
(4)、聲明的同時必須賦值,聲明後值沒法改變spa

{   
    const b; //報錯
    
    const a = 123;
    a = 222; //報錯
    
}
注意:針對"對象"就不同了,以下:
{
    const obj = {
        name:"lisi"
     }
    console.log(obj.name); //lisi
    
    obj.name = "zhaoliu";
    console.log(obj.name);//zhaoliu
}
//在上面中定義的是一個常量對象,對象是儲存在內存的「堆區」,經過一個地址描述出來,在「棧區」關聯此地址。因此,obj存儲的是地址,而不是值,是能夠作修改的。

三、解構賦值prototype

ES6容許按照必定的模式從數組和對象中提取值,對變量進行賦值,這被稱爲解構。

(1)、基本用法code

//新的定義方法
let  [name,age,sex] = ["李四",20,"女"];

//之前的定義方法
let name = "李四";
let age = 20;
let sex = "女"

(2)、對象的解構賦值htm

//前面的key值和後面的key值相對應的
  let {name,age,friends} = {name:"zhangsan",age:12,friends:["lulu","女"]};
  console.log(name); //zhangsan

(3)、嵌套數組的解構賦值

//只要一一對應就能夠
let [a1,[a2,a3,[a4,a5]]] = [1,[2,3,[4,5]]];
console.log(a1,a2,a3,a4,a5);  //1,2,3,4,5

(4)、字符串的解構賦值

let [a,b,c,d,e] = "我是中國人";
console.log(a);   //我
console.log(b);   //是
console.log(c);   //中
console.log(d);   //國
console.log(e);   //人

(5)、空缺變量

let [a,b,,e]=['a','b',[1,2],4]

(6)、多餘變量

let [a,b,,e,f]=['a','b',[3,4],5]
注意:由於字符串有構造器,因此能夠解析出來。

四、數據集合: set

(1)、特色

① 相似於數組,但沒有重複的元素(惟一的);
② 開發中用於去除重複數據;
③ key和value都是相等的;

let set = new Set(['zhangsan','zhangsan','lisi','wangwu']);
    console.log(set);  // zhangsan ,lisi ,wangwu

(2)、一個屬性

let set = new Set(['zhangsan','zhangsan','lisi','wangwu']);
console.log(set.size);   // 3

(3)、四個方法

add方法

vlet set = new Set(["zhangsan","lisi"]);
console.log(set); // {"zhangsan", "lisi"}
set.add("wangwu");
console.log(set); // {"zhangsan", "lisi", "wangwu"}

delete方法:

let set = new Set(["zhangsan","lisi"]);
//直接將刪除的值傳進去便可
set.delete("lisi");
console.log(set); //{"zhangsan"}

has方法:

let set = new Set(["zhangsan","lisi"]);
console.log(set.has("lisi"));  //true

clear方法:

let set = new Set(["zhangsan","lisi"]);
set.clear(); // 此時set爲空了

五、數據集合:map

(1)、特色

① 相似於對象,本質上是鍵值對的集合;
② "鍵"不侷限於字符串,各類類型的值(包括對象)均可以當作鍵;
③ 對象"字符串——值",Map"值——值",是一種更完善的hash結構實現;

//建立map
  let obj1 = {a:1}, obj2 ={b:2};
  const map = new Map([
    ['name','張雪'],
    ["age",21],
    ["sex",'男'],
    [obj1,"haha"],
    [obj2,'wowo']
  ]);
  console.log(map);   //{"name" => "張雪", "age" => 21, "sex" => "男", Object => "haha",Object => "wowo"}

結果如圖所示:
圖片描述

(2)、一個屬性

const map = new Map([
    ['name','張雪'],
    ["age",21],
    ["age",21],
    ["sex",'男']
]);
console.log(map.size); //3

(3)、五個方法

① get/set方法:

const map = new Map([
        ['name','張雪'],
        ["age",21],
        ["age",21],
        ["sex",'男']
    ]);
    console.log(map.get("name")); // "張雪"
    map.set("A","aa");
    console.log(map.get("A")); // aa

② delete方法:

map.delete("age");
    console.log(map); // {"name" => "張雪", "sex" => "男", "A" => "aa"}

③ has方法:

console.log(map.has("sex"));  //true

④clear方法:

map.clear();
    console.log(map); //map爲空

⑤keys、values、entries

map.keys();  //  {"name", "age", "sex"}
    map.values();  //  {"張雪", 21, "男"}
    map.entries();  // {"name" => "張雪", "age" => 21, "sex" => "男"}

⑥遍歷

map.forEach(function(value,key){
      console.log(key +":"+value);
    });//name:張雪   age:21   sex:男
注意:
const map = new Map([
    ['name','張雪'],
    ["age",21],
    ["age",21],
    ["sex",'男']
]);
//由於對象存儲在堆區,存在的地址是不一樣的,因此一下兩個都會被set進map中。
map.set({},"hehe");
map.set({},"qq");
console.log(map); // {"name" => "張雪", "age" => 21, "sex" => "男", Object => "hehe", Object => "qq"}

六、Symbol

(1)、應用場景:

ES5的對象屬性名都是字符串,容易形成屬性名衝突;ES6 引入新的原始數據類型Symbol,表示獨一無二的值。

(2)、對象的屬性名兩種形式

①字符串

②symbol類型(獨一無二,不會與其餘屬性衝突)

//定義一個symbol
    let str1 = Symbol();
    let str2 = Symbol();
    console.log(str1 === str2); //false
    console.log(typeof(str1)); //Symbol
    
    
    //symbol主要用於對象屬性的定義,且定義的屬性是惟一的
    const obj = {};
    obj[Symbol("name")]="zhangsan";
    obj[Symbol("name")]="lisi"
    console.log(obj);//{Symbol(name): "zhangsan", Symbol(name): "lisi"}

七、class
(1)、ES6中新增的語法糖,做用在於讓對象原型的寫法更加清晰,更像面向對象的編程方式。也是構造函數的另外一種寫法。

//構造函數寫法
  function Person(name,age){
    this.name = name;
    this.age = age;

  }
  Person.prototype = {
    constructor:Person,
    print(){
      console.log("我叫"+this.name+",今年"+this.age+"歲")
    }
  }
  let person = new Person("張三",12);
  person.print(); //我叫張三,今年12歲
  
  
  
  // class面向對象
  class Person{
    constructor(name,age){
      this.name = name;
      this.age = age;
    }
    print(){
      console.log("我叫"+this.name+",今年"+this.age+"歲")
    }
  }
  let person = new Person("張三",12);
  person.print();//我叫張三,今年12歲

八、模板字符串

模板字符串在Vue.js中使用的比較多的。使用 `` 符號,這樣可實現代買的格式化。
let str = "你好!";
let className = "red";
let html = `<html>
              <head>今每天氣很好!</head>
              <p class="${className}"> ${str} </p>   //這裏使用${}的形式調用變量
           </html>`
console.log(html);

九、數組的擴展
(1)、Array.from

let list = document.querySelectorAll("li")
   console.log(Array.isArray(list));  //false
   Array.from(list);  //將非數組list轉爲數組
   console.log(Array.isArray(Array.from(list))); //true

(2)、Array.of

Array.of(1,2,3,4); //將零散元素轉爲數組
 console.log(Array.isArray(Array.of(1, 2, 3, 4)));  //true

十、對象的擴展
(1)、

let obj = {
    "name":"lisi",
    "age":12
  }
  console.log(obj);  //{name: "lisi", age: 12}

(2)、ES6中key和value同樣時,直接寫一個便可。

//這種寫法等同於下面的方法,經常使用下面的方法
  let name = "zhangsan"
  let age = 12
  let obj = {
    "name":name,
    "age":age
  }
  console.log(obj);

  //方法同上 
  let name = "zhangsan"
  let age = 12
  let obj = {
    name,
    age
  }
  console.log(obj);

(3)、assign用法:

let obj1 = {name:"lisi"};
    let obj2 ={age:21};
    let obj = {};
    Object.assign(obj,obj1,obj2);//將obj1,obj2合併到obj上。
    console.log(obj);//{name: "lisi", age: 21}

(4)、延展操做符

let str = "張三";
  let strArr =[...str];
  console.log(Array.isArray(strArr));  //true
主要用於數據傳遞和數組去重。
let myArr = [1,2,10,"zhangsan",20,2,1];
  console.log(new Set(myArr));//根據set惟一性去重
  let newArr = [...new Set(myArr); //將set轉爲array
  console.log(Array.isArray([...new Set(myArr)])); //true

十、函數擴展

(1)、形參設置默認值

//ES6中,直接將的形參設置默值
   function sum(num1 = 10,num2 = 10){
     console.log(num1 + num2);
   }
   sum();   //20
   sum(1,3);  //4

(2)、參數形式

//在不清楚元個數時,使用延展操做符代替
 function sum(name,...nums){
   console.log(name)
   let result = 0;
   for(let value of nums){
     result += value
   }
   return result;
 }

console.log(sum("李四",1,45,3,2)); // 李四  51
相關文章
相關標籤/搜索