成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Glance at ES6

shmily / 1479人閱讀

摘要:第二步每一個實例化好的對象上都有一個,它接受兩個參數(shù),分別對應成功和失敗的回調函數(shù),并且這連個回調函數(shù)以之前傳遞出的結果作為實參。

1: Block Scope
1.1 變量的塊級作用域名

let 定義的變量擁有block的作用域
if(true){
    let a = 1;
    console.log(a); // 1
 }
console.log(a); // Uncaught ReferenceError: a is not defined

1.2 function的塊級作用域

if (true) {
    // Throws a syntax error in ES5, not so in ES6
    function printName() {
        // ...
    }
}

但是在ES6是合法的,并且擁有塊級作用域:

if (true) {
    console.log(typeof doSomething);        // "function"
    function printName() {
        // ...
    }
    printName();
}
console.log(typeof printName);            // "undefined"

2: Function接受可以設置默認值的參數(shù), 剩余參數(shù),以及擴展參數(shù)
2.1 給參數(shù)設置默認值

function printName(firstName, middleName="Roger", lastName){
  console.log(`${firstName} ${middleName} ${lastName}`);
}

printName("George"); // George Roger undefined
printName("George", undefined, "Waters"); // George Roger Waters
printName("George", null, "Waters"); // George null Waters

從上面的例子可以看出來,只有當相應的參數(shù)沒有傳值,或者明確傳入undefined時,才會使用參數(shù)的默認值。

2.2 剩余參數(shù)(rest parameters)

function printName(name, ...keys) {
  console.log(keys); // ["a", "b"]
  console.log(arguments.length); // 3
}
printName("hehe", "a", "b");
console.log(printName.length); // 1

剩余參數(shù)的語法是三個點(...)跟著一個變量名,它代表從某個位置開始到最后的所有剩余參數(shù),這個變量是一個數(shù)組,元素就是每一個剩余參數(shù)。
并且我們也可以看得出來,剩余參數(shù)的這種語法,對arguments.length 和function本身的length并沒有影響。

3: Function的箭頭函數(shù)形式:

var sum = (num1, num2) => num1 + num2;

// effectively equivalent to:
var getName = function() {
    return "Nicholas";
};

上面只是一個很簡單的例子,更多的內容會專門再寫文章延伸。

4: 新添加的基本類型 Symbol

一切的基本類型(primitive type)有:strings, numbers, booleans, null, and undefined。ES6新添加了一個symbol。

let firstName = Symbol();
let person = {};

person[firstName] = "Nicholas";
console.log(person[firstName]);     // "Nicholas"

5: ES6的面向對象新語法:Class

ES6添加了Class,可以像其他面向對象語言一樣通過new一個類型來創(chuàng)建一個實例:

class Printer {

// equivalent of the PersonType constructor
    constructor(name) {
        this.name = name;
    }

// equivalent of PersonType.prototype.sayName
    printName() {
        console.log(this.name);
    }
}

let printer = new Printer("John");
printer.printName();   // "John"

console.log(printer instanceof Printer);     // true
console.log(printer instanceof Object);          // true

console.log(typeof Printer);                    // "function"
console.log(typeof Printer.prototype.printName);  // "function"

6: JS模塊化編程的支持 import

ES6之前如果想要對JS模塊化編程,必須借助第三方庫,例如require.js或者browserify.js。但是ES6卻進行了原生的支持,再也不需要借用第三方庫了。
首先,export

// this function is private to the module
function subtract(num1, num2) {
    return num1 - num2;
}

// define a function...
function multiply(num1, num2) {
    return num1 * num2;
}

// ...and then export it later
export { multiply };

以上代碼定義在一個js文件里面,比方說example.js
對于想要被別人用的方法,可以export出去,同時可以不export本身的私有函數(shù)。
然后,import
然后在另外一個js文件里,我想用example.js里的mutiply方法,那么我就在我的js文件里面import就行了:

    import { multiply } from "./example.js";

接下來我就可以在我的js文件里面調用multiply這個方法了,就像java一樣。

7: ES6的異步編程Promise

在ES6之前,我們要利用promise來異步編程,必須借助第三方的庫,比方說Promises.js,Q.js.但是現(xiàn)在ES6對Promise實現(xiàn)了原生的支持,我們也就不再需要引用第三方庫了.來看一個ES6原生promise的例子:

//第一步:實例化一個Promise對象
let promiseA = new Promise(function(resolve, reject){
  if(true){
    resolve({name: "nana", age: "19"});
  }else{
    reject({code: "222", message: "hehe"});
  }    
});

let resolveF = function(student){
  console.log(`name: ${student.name}`);
  console.log(`age: ${student.age}`);
}

let rejectF = function(error){
    console.log(error.code);
}

//第二步,調用Promise對象上的then()指定異步操作成功和失敗時候的回調函數(shù)
promiseA.then(resolveF, rejectF); 

第一步:通過new實例化一個Promise,它接受一個函數(shù)作為參數(shù)。這個函數(shù)有兩個參數(shù):
分別在異步操作成功和失敗的時候調用,并且把異步操作的結果作為接下來的回調函數(shù)的參數(shù)傳出去。
第二步:每一個實例化好的promise對象上都有一個then(),它接受兩個參數(shù),分別對應promise成功和失敗的回調函數(shù),并且這連個回調函數(shù)以之前promise傳遞出的結果作為實參。所以如代碼所示,在resolveF(student)函數(shù)里,我們拿到的student對象就是之前在promiseA里面resolve(student)傳遞出來的student對象。

8: 字符串模版(template strings)

let firstName = "John";
let middleName = "Winston";
let fullName = `${firstName} ${middleName} Lennon`;
console.log(fullName);  //John Winston Lennon

語法很簡單:
1: 把字符串模版包在一對后引號(``),注意不是單引號(‘’)里面
2: 通過${variable}對變量取值

PS: 后引號()就是如下圖所示的[esc]鍵正下方的那個和波浪號()在一起的鍵

9: 解構(deconstruction)

let fullName = {
  firstName: "John",
  middleName: "Winston",
  lastName: "Lennon"
};

let {firstName, lastName} = fullName;
console.log(firstName); //John
console.log(lastName); //Lennon

以上是一個對對象解構的例子。對于對象來說,它是按照與對象的key的名字一一對應的方式解構賦值的。

10: for ...of
for ...of 用來對數(shù)組或者對象進行循環(huán),每次得到每個元素的值value,與for...in的區(qū)別的是,后者每次得到的是數(shù)組的下標index或者對象的key。

let fullName = ["John", "Winston", "Lennon"]
for(let n of fullName) {
  console.log(n); // John Winston Lennon
}

for(let n in fullName){
  console.log(n); // 0 1 2
}

本來一開始想寫一個概覽,但是寫著寫著就覺得這樣的半壺水好沒有意思。所以這篇文章,就此打住,之后還是針對每一點都具體地來寫寫吧。

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/87812.html

相關文章

  • Scrapy入門程序點評

    摘要:本文大部分內容摘抄自官網(wǎng)的,看到巧妙之處則加了點評。,接下來的工作至此,框架已經(jīng)明確選定了,接下來,我們將進一步研讀的文檔,研究怎樣把的封裝成需要的。,文檔修改歷史,首次發(fā)布 showImg(https://segmentfault.com/img/bVx6ZU); 1,引言 在《Scrapy的架構初探》一文,我基于爬蟲開發(fā)的經(jīng)驗對Scrapy官網(wǎng)文章作了點評和解讀,事件驅動的異步處理...

    baiy 評論0 收藏0
  • React Hooks 從入門到上手

    摘要:前言樓主最近在整理的一些資料,為項目重構作準備,下午整理成了這篇文章。給傳入的是一個初始值,比如,這個按鈕的最初要顯示的是。取代了提供了一個統(tǒng)一的。 showImg(https://segmentfault.com/img/bVbpUle?w=900&h=550); Hooks are a new addition in React 16.8. They let you use sta...

    XFLY 評論0 收藏0
  • React Hooks 從入門到上手

    摘要:前言樓主最近在整理的一些資料,為項目重構作準備,下午整理成了這篇文章。給傳入的是一個初始值,比如,這個按鈕的最初要顯示的是。取代了提供了一個統(tǒng)一的。 showImg(https://segmentfault.com/img/bVbpUle?w=900&h=550); Hooks are a new addition in React 16.8. They let you use sta...

    zhouzhou 評論0 收藏0
  • 【Python3】Python模塊與包的導入

    摘要:模塊與包的導入一模塊導入定義模塊,是一個文件,以結尾,包含了對象定義和語句。使用模塊還可以避免函數(shù)名和變量名沖突。特別注意的是自定義的模塊名不應該與系統(tǒng)內置模塊重名。包是由一系列模塊組成的集合。模塊的導入使用語句。 【Python3】Python模塊與包的導入 一、模塊導入 1. 定義 Python 模塊(Module),是一個 Python 文件,以 .py 結尾,包含了 Pytho...

    CoyPan 評論0 收藏0
  • 多云對接,浪潮智能存儲G2面向OpenStack集成5大API

    摘要:在接受調查的用戶中,三分之一來自亞洲,年則是,增長最顯著的是中國受訪用戶。作為中國市場的領先的廠商,浪潮不僅是的黃金會員,更把全面擁抱作為自己的核心戰(zhàn)略。OpenStack是當前商用最廣泛的開源云平臺之一。其擁有10余種組件,適用公有、私有、混合等所有類型的云環(huán)境,可控制整個數(shù)據(jù)中心的計算、存儲和網(wǎng)絡資源。多云趨勢下,浪潮智能存儲G2面向 Horizon、Glance、Nove、Swift、...

    SillyMonkey 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<