ES6學習筆記(一)【變數,字串】

風靈使發表於2019-04-05

簡介

JavaScript 的型別分為兩種:原始資料型別(Primitive data types)和物件型別(Object types)。

變數則是他們的載體

在 ES6 以前,宣告一個變數只有兩種方式 —— varfunction

ES6 新增四種宣告變數指令 letconstimportclass,這裡只介紹前兩種,後兩種將在後面章節中說明

注意:本書只討論思路,不探討細節,如想了解關於ES6變數的全部知識點,請Google查閱相關文件。

正文

letconst命令的用法類似於var,但是所宣告的變數,只在宣告所在的塊級作用域內有效。

{
  let a = 1
  const b = 2
  var c = 3
}

a // ReferenceError: a is not defined.
b // ReferenceError: b is not defined.
c // 3

在ES6以前,由於存在變數提升,var定義的變數可以在宣告之前就呼叫而不報錯,而letconst必須先宣告後使用

並且let不允許重複宣告,const一旦宣告,值就不能改變。

let a = 1
let a = 2
// Uncaught SyntaxError: Identifier 'a' has already been declared
const YEAR = 2017
YEAR = 2018
// TypeError: Assignment to constant variable.

思考

這部分內容希望你都可以手動敲一遍,獨立思考

for (var i = 0; i < 10; i++) {}
console.log(i)

把上面for迴圈中的var換成let會有什麼不同?為什麼會這樣?


const foo = {}

// 為 foo 新增一個屬性,會成功嗎?
foo.prop = 123

// 將 foo 指向另一個物件,會成功嗎?
foo = {}

如何解釋上面的現象呢?


知道什麼是變數提升嗎?不知道的話,不如Google搜尋一下看看


字串

簡介

ES6 字串相關的知識點最重要的是模版字串,然後是一些不常用的新增API

ES6 還加強了對 Unicode 編碼的支援,但是這幾乎在日常工作中用不到,這裡不做說明

正文

在ES6以前,字串用單引號或者雙引號包裹,這種字串最大的缺點是不能換行,書寫時換行會報錯

let str = "aaa
          aaa"

// Uncaught SyntaxError: Invalid or unexpected token

在ES6中,新增了一種字串表示方式,用反引號 ` (鍵盤上數字1左側的按鍵)包裹,允許插入變數或簡單的JavaScript表示式,也允許換行書寫

let str =`aaa
          bbb
          ccc`
let x = 1;
let y = 2;

// $後面的花括號裡的字串會被js解析器認為是JavaScript語句
`${x} + ${y} = ${x + y}`
// "1 + 2 = 3"

`${x} + ${y * 2} = ${x + y * 2}`
// "1 + 4 = 5"

let obj = {x: 1, y: 2};
`${obj.x + obj.y}`
// 3

ES6為字串新增了遍歷器介面(遍歷器介面會在後面章節詳細介紹),使字串可以被for...of迴圈遍歷。

for (let x of 'foo') {
  console.log(x)
}
// "f"
// "o"
// "o"

ES6對字串的擴充套件功能不止遠這些,但是99%的時候我們用到的只有這些

思考

這部分內容希望你都可以手動敲一遍,獨立思考

在ES6以前我們如果想換行書寫字串應該怎麼做?


`${if(true){console.log(1)}}`
// 這樣寫可行嗎?

如果想在模版字串內執行判斷語句應該怎麼做?

相關文章