做用域: 只在声明指令的块级做用域内有效。
① 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关键字去掉而后在“()”后面加一个“=>”