做用域: 只在聲明指令的塊級做用域內有效。
① let所聲明的變量能夠改變,值和類型均可以改變,沒有限制。編程
let a = 123 a = 456 // 正確,能夠改變 let b = [123] b = [456] // 正確,能夠改變
② const聲明的變量不可改變值,這意味着const一旦聲明變量必須當即初始化,不能之後賦值。json
const a ;//報錯,一旦聲明變量,應該當即賦值!! const b = 2; b = 3//報錯,由於定義常量以後不能成從新賦值!!
對於複合類型的變量,如數組和對象,變量名不指向數據,而是指向數據所在的地址。const命令只是保證變量名指向的地址不變,並不保證該地址的數據不變,因此將一個對象聲明爲常量必須很是當心數組
const names = []; names = [1,2,3] //出錯,由於變量names指向的地址不能發生改變,應始終指向[]所在的地址!!![1,2,3]與[]不是同一個地址 const names = []; names = [1,2,3] //出錯,由於變量names指向的地址不能發生改變,應始終指向[]所在的地址!!![1,2,3]與[]不是同一個地址 //不會報錯,由於names指向的地址不變,改變的只是內部數據 const names = []; names[0] = 1 names[1] = 2 names[2] = 3
一次性聲明多個變量:數據結構
let [a, b, c] = [1, 2, 3]; console.log(a) // 1 console.log(b) // 2 console.log(c) // 3
Object.assign()方法用於對象的合併,將原對象(source)的全部可枚舉屬性複製到目標對象(target)app
const target = { a: 1 }; const source1 = { b: 2 }; const source2 = { c: 3 }; Object.assign(target, source1, source2); target // {a:1, b:2, c:3}
Object.assign方法的第一個參數是目標對象,後面的參數都是源對象。異步
注意,若是目標對象與源對象有同名屬性,或多個源對象有同名屬性,則後面的屬性會覆蓋前面的屬性。異步編程
const target = { a: 1, b: 1 }; const source1 = { b: 2, c: 2 }; const source2 = { c: 3 }; Object.assign(target, source1, source2); target // {a:1, b:2, c:3} Object.assign 方法實行的是淺拷貝,而不是深拷貝。 const obj1 = {a: {b: 1}}; const obj2 = Object.assign({}, obj1); obj1.a.b = 2; obj2.a.b // 2
Promise 是異步編程的一種解決方案。函數
import 導入模塊、export 導出模塊spa
// example2.js // 導出默認, 有且只有一個默認 export default const example2 = { name : 'my name', age : 'my age', getName = function(){ return 'my name' } } //所有導入 // 名字能夠修改 import people from './example2.js' -------------------我是一條華麗的分界線--------------------------- // example1.js // 部分導出 export let name = 'my name' export let age = 'my age' export let getName = function(){ return 'my name'} // 導入部分 // 名字必須和 定義的名字同樣。 import {name, age} from './example1.js'
//有一種特殊狀況,即容許你將整個模塊看成單一對象進行導入
//該模塊的全部導出都會做爲對象的屬性存在code
import * as example from "./example1.js" console.log(example.name) console.log(example.age) console.log(example.getName()) -------------------我是一條華麗的分界線--------------------------- // example3.js // 有導出默認, 有且只有一個默認,// 又有部分導出 export default const example3 = { birthday : '2018 09 20' } export let name = 'my name' export let age = 'my age' export let getName = function(){ return 'my name'} // 導入默認與部分 import example3, {name, age} from './example1.js'
Es6的這種新的「字符串拼接」方法比較簡單,沒有繁瑣的加號和引號,只須要在所須要的字符串「邊界」加上``便可。
var name = 'Datura'; var age = 18; var sex = 'nü'; var hobby = '敲代碼'; var str1 = `我是${name},今年${age}歲,性別${sex}的了,愛好${hobby}`; //注意此處有兩個「 `` 」 var str2 = '我是'+name+',今年'+age+'歲,性別'+sex+',愛好'+hobby+''; //這個是原來的寫法 alert(st1r);
ES6提供了新的數據結構Map,Map結構提供了「值—值」的對應,是一種更完善的Hash結構實現。
咱們來新建一個Map對象,併爲其賦值:
let map = new Map(); map.set('a','apple'); map.set('b','banana'); console.log(map); // Map {"a" => "apple", "b" => "banana"}
1 獲取map裏面的值:
獲取Map對象裏面的值map.get(‘b’): banana
2 刪除Map對象裏面的值map.delete()
3 若是咱們只須要map裏面的值:
for(let name of map.values()){ console.log(name); ////apple banana }
4 若是咱們只須要map裏面的key
for(let name of map.keys()){ console.log(name); //a b }
一: for in循環
//循環數組 let arr = [12,5,8]; for(let i = 0;i<arr.length;i++){ console.log(i); //0 1 2 console.log(arr[i]); //12 5 8 } let arr = [12,5,8]; for(let i in arr){ console.log(i); //0 1 2 console.log(arr[i]); //12 5 8 } //循環json數據 let json = {a:12,b:5,c:8}; for(let name in json){ console.log(name); //a b c console.log(json[name]); //12 5 8 }
二: for of循環
//循環數組 let arr = [12,5,8]; for(let name of arr){ console.log(name); // 12 5 8 } //循環json數據 let json = {a:'apple',b:'banana'}; for(let name of json){ console.log(name); } //報錯,由於不能用for ...of...來循環json數據
咱們先回顧下ES5函數定義與調用:
var show = function(){ alert(12); }; show(); // 12 const show = () =>{ alert(12); }; show(); // 12 //我的理解:這裏將function關鍵字去掉而後在「()」後面加一個「=>」