1. 程式人生 > >深入淺出ES6---第一篇

深入淺出ES6---第一篇

ECMAScript 6(以下簡稱ES6)是JavaScript語言的下一代標準。因為當前版本的ES6是在2015年釋出的,所以又稱ECMAScript 2015。雖然目前並不是所有瀏覽器都能相容ES6全部特性,但越來越多的程式設計師在實際專案當中已經開始使用ES6了。所以就算我們現在不打算使用ES6,但是也該懂點ES6的語法了。

let和const

這兩個的用途與var類似,都是用來宣告變數的,但在實際運用中他倆都有各自的特殊用途。
注意:ES6裡let和const沒有變數的提升,一定要聲明後再使用,但程式碼編譯成ES5之後,變數提升依舊存在.
let
(1)在ES5只有全域性作用域和函式作用域,沒有塊級作用域,而let則實際上為JavaScript新增了塊級作用域。用它所宣告的變數,只在let命令所在的程式碼塊內有效。

let name = 'yuu'

while (true) {
    let name = 'xiao'
    console.log(name)  //xiao
    break
}

console.log(name)  //yuu

(2)另外一個var帶來的不合理場景就是用來計數的迴圈變數洩露為全域性變數,而使用let則不會出現這個問題。

var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 6

const
const也用來宣告變數,但是宣告的是常量。一旦宣告,常量的值就不能改變,當我們嘗試去改變用const宣告的常量時,瀏覽器就會報錯。
const有一個很好的應用場景,就是當我們引用第三方庫的時宣告的變數,用const來宣告可以避免未來不小心重新命名而導致出現bug.

const PI = Math.PI
PI = 23 //Module build failed: SyntaxError: /es6/app.js: "PI" is read-only

注意:當值為基礎資料型別時,那麼這裡的值,就是指值本身。 而當值對應的為引用資料型別時,那麼這裡的值,則表示指向該物件的引用。這裡需要注意,正因為該值為一個引用,只需要保證引用不變就可以,我們仍然可以改變該引用所指向的物件。

const obj = {
    a: 20,
    b: 30
}

obj.a = 30;
obj.c = 40;

console.log(obj); // Object {a: 30, b: 30,c:40}
這種情況下只要不是直接覆蓋obj的值,只改變屬性什麼的還是還可以

模版字串

模板字串是為了解決使用+號拼接字串的不便利而出現的。使用 反引號“(鍵盤上esc下面那個鍵) 將整個字串包裹起來,而在其中使用 ${} 來包裹一個變數或者一個表示式。

// es5
var a = 20;
var b = 30;
var string = a + "+" + b + "=" + (a + b);

// es6
const a = 20;
const b = 30;
const string = `${a}+${b}=${a+b}`;

預設引數(Default Parameters)

以前我們通過下面方式來定義預設引數:

var link = function (height, color, url) {
    var height = height || 50;
    var color = color || 'red';
    var url = url || 'http://azat.co';
    ...
}

但是到引數值是0後,就有問題了,因為在JavaScript中,0表示fasle,它是預設被hard-coded的值,而不能變成引數本身的值。但在ES6,我們可以直接把預設值放在函式聲明裡:

var link = function(height = 50, color = 'red', url = 'http://azat.co') {
  ...
}

多行字串(Multi-line Strings )

ES6的多行字串是一個非常實用的功能。在ES5中,我們不得不使用以下方法來表示多行字串:

alert("你好,\n 我叫\n yuu");

然而在ES6中,僅僅用反引號就可以解決了:

alert(`你好
我叫
olive`);

解構(destructuring)賦值

陣列以序列號一一對應,這是一個有序的對應關係。
物件根據屬性名一一對應,這是一個無序的對應關係。
陣列的解構賦值

// es5
var arr = [1, 2, 3];
var a = arr[0];
var b = arr[1];
var c = arr[2];

// es6
const arr = [1, 2, 3];
const [a, b, c] = arr;
console.log(a,b,c)  // 1,2,3

物件的解構賦值

const MYOBJ = {
    className: 'trigger-button',
    loading: false,
    clicked: true,
    disabled: 'disabled'
}

// es5
var loading = MYOBJ.loading;
var clicked = MYOBJ.clicked;

// es6
const { loading, clicked } = MYOBJ;
console.log(loading);// false

// 還可以給一個預設值,當props物件中找不到loading時,loading就等於該預設值
const { loadings = false, clicked } = MYOBJ;
console.log(loadings);// false

展開運算子(spread operater)

在ES6中用…來表示展開運算子,它可以將陣列方法或者物件進行展開。
1.函式呼叫中使用展開運算子

//函式呼叫裡,將一個數組展開成多個引數,我們會用到apply:
function test(a, b, c) { }
var args = [0, 1, 2];
test.apply(null, args);

//ES6
function test(a,b,c) { }
var args = [0,1,2];
test(...args);

2.陣列字面量中使用展開運算子
有了ES6,我們可以直接加一個數組直接合併到另外一個數組當中.

const arr1 = [1, 2, 3];
const arr2 = [...arr1, 10, 20, 30];

// 這樣,arr2 就變成了[1, 2, 3, 10, 20, 30];

展開運算子也可以用在push函式中,可以不用再用apply()函式來合併兩個陣列.

var arr1=['a','b','c'];
var arr2=['d','e'];
arr1.push(...arr2); //['a','b','c','d','e']

3.用於解構賦值

let [arg1,arg2,...arg3] = [1, 2, 3, 4];
arg1 //1
arg2 //2
arg3 //['3','4']

注意:解構賦值中展開運算子只能用在最後,否則會報錯
4.展開運算子可以將偽陣列變成真正的陣列

var list=document.querySelectorAll('div');
var arr=[..list];

Object.prototype.toString.apply(list) // "[object NodeList]"
 Object.prototype.toString.apply(arr) // "[object Array]"

相關推薦

深入淺出ES6---第一

ECMAScript 6(以下簡稱ES6)是JavaScript語言的下一代標準。因為當前版本的ES6是在2015年釋出的,所以又稱ECMAScript 2015。雖然目前並不是所有瀏覽器都能相容ES6全部特性,但越來越多的程式設計師在實際專案當中已經開始使用E

ES6第一 ES6簡介 和轉碼器等介紹

一、什麼是ES6?ES6和ES2015的關係?ECMAScript和JavaScript的關係? JavaScript的創造者是Netscape公司,後將JavaScript提交給標準化組織ECMA,希望這種語言能夠成為國際標準,ECMA規定的瀏覽器指令碼語言標準就稱之為E

深入淺出ES6---第二

arrow function箭頭函式 函式的快捷寫法,不需要通過 function 關鍵字建立函式,並且還可以省略 return 關鍵字。=> 是function的簡寫形式,支援expression 和 statement 兩種形式。 // 箭頭函

深入淺出es6----物件

1、Object.is()用來比較兩個物件是否嚴格相等,相當於 ===不同之處只有兩個:一是+0不等於-0,二是NaN等於自身。+0 === -0  //trueNaN === NaN //falseObject.is(+0,-0)//falseObject.is(NaN,N

深入淺出系列第一(設計模式之單一職責原則)—— 從純小白到Java開發的坎坷經歷

各位看官大大們,晚上好。好久不見,我想死你們了...     先說說寫這個系列文章的背景: 工作了這麼久了,每天都忙著寫業務,好久沒有好好靜下心來好好總結總結了。正好這段時間公司組織設計模式的分享分,所以我才有機會在這裡和大家嘮嘮嗑。 也許因為自己是小白自學的吧,所以磕磕絆絆走了好多彎路。

es6學習第一(let和const命令)

let和const 命令 let命令 1、es6新增了let命令,用來宣告變數。它的用法和var 類似,但是let宣告的變數,只在let命令所在的程式碼塊內有效。 { let a = 10 var b = 1 } console.log(a) //referenc

Java學習筆記——淺談數據結構與Java集合框架(第一、List)

技術分享 emp 鏈表 adc 下標 -c nod nal integer 橫看成嶺側成峰,遠近高低各不同。不識廬山真面目,只緣身在此山中。               ——蘇軾 這一塊兒學的是雲裏霧裏,咱們先從簡單的入手。逐漸的撥開迷霧見太陽。本次先做List集合的三

第一,js表單驗證模板

scrip put func wrong lur ctype lan lang 執行 下面是對於一個email的表單驗證的基本模板<!DOCTYPE html><html lang="en"><head> <meta char

第一:linux系統應用管理之用戶的切換

修改用戶、用戶切換、添加普通用戶、系統應用管理管理Linux系統運維之前,先來查看一下當前Linux系統的版本、內核等信息。命令如下:[[email protected]/* */ ~]# cat /etc/redhat-release CentOS release 6.8 (Final)

CodeIgniter 入門教程第一:信息發布

per 所有 控制 知識點 image doc ref har 提交 一、MVC CodeIgniter 采用MVC架構即:控制層、模型層和視圖層。 對應Application下面的文件夾 (圖1): 所有新建文件以.php結尾 視圖層

JDFS:一款分布式文件管理實用程序第一(線程池、epoll、上傳、下載)

cpu nload tree 程序 fun 是的 發的 fop let 一 前言   截止目前,筆者在博客園上面已經發表了3篇關於網絡下載的文章,這三篇博客實現了基於socket的http多線程遠程斷點下載實用程序。筆者打算在此基礎上開發出一款分布式文件管理實用程序,截止目

第一:查閱數據

如何使用 str 打印 chl sof 表示 cnblogs 命令 numeric 前言 本文講解如何使用 R 語言對數據集進行總體上的了解。 在進行數據挖掘之前,我們有必要對挖掘的數據集對象有一個總體的了解。本文采用具體實例講解的方式,詳細

第一:你不一定了解的"推薦系統"

auto 目錄 主動 類目 好友 mage 放棄 百度 博文 前言 [推薦系統 - 基礎教程]可能是穆晨的所有博文裏,最有趣最好玩的一個系列了^ ^。 作為該系列的[入門篇],本文將輕松愉快地向讀者介紹推薦系統這項大數據領域中的熱門技術。

Spring框架第一之簡單入門

其中 lan .org exp mage odi 只需要 需要 資源 一、下載Spring的jar包 通過http://repo.spring.io/release/org/springframework/spring/地址下載最新的Spring的zip包,當然,如果你是在

第一博文

記錄 開發 這是一家做大數據的公司,有一個平臺是為大數據服務的,用的是angular1.5作為後臺的前端開發框架,我主要是做平臺的二次開發。之前用jquery用的比較熟,後來發現前端發展這麽迅速,在2016年可以說是爆炸式,在朋友的推薦下使用過reactjs,後來入了ng的門,只能說這兩個框架各有千秋

python核心編程一書筆記之第一

usr 兩個 代碼塊 算術操作符 串操作 對齊 err 轉換成 != #!/usr/bin/env python# -*- coding:utf-8 -*- #env 是一個命令用來尋找系統中的python解釋器。第二條解釋使用utf-8編碼 在

Linux實戰第一:Centos6.9/RHEL6.9詳細安裝攻略(LVM)

linux個人筆記分享(在線閱讀):http://note.youdao.com/noteshare?id=bb2ad6216bff8cddaa3e360c76392c9b PDF版本下載http://down.51cto.com/data/2321269本文出自 “人才雞雞” 博客,請務必保留此出處http

第一、Android Supersu 權限管理定制,隱藏過濾權限,指定APP最高權限

權限 一律 例如 mod 系統 權限管理 過濾 tracking 屏蔽 近期有個需求,在預裝ROM的時候,須要權限,可是又不同意全部的應用都有權限,僅僅同意自己的應用有最高的權限(當然沒有系統簽名情況下)。 所以。編譯了CM 提取了supersu進行了二次定制,讓他進行

Python學習(第一

logs 完全 python3 兩個 ges tex pytho 格式 代碼 說明:筆者所用的版本是python3.6 首先,說一下python的三種格式輸出。第一種用到了格式化操作符%,格式化字符串時,Python使用一個字符串作為模板。模板中有格式符,這些格式符為真實值

Golang學習-第一 Golang的簡單介紹及Windows環境下安裝、部署

需要 簡單 電腦 pan 生成文件 多核 -- pear () 序言 這是本人博客園第一篇文章,寫的不到位之處,希望各位看客們諒解。 本人一直從事.NET的開發工作,最近在學習Golang,所以想著之前學習的過程中都沒怎麽好好的將學習過程記錄下來。深感惋惜! 現在將Gola