在线编译器:babel、github

在nongjs中使用
'use strict'
let a = ; 运行node :
node --harmony_destructuring xxx.js 代码块:
用{}包起来的代码块,比如 if for while
特点:只能在代码块里面使用 var 只有函数作用域,可以重复声明,
let const 有块级作用域,不可重复声明 封闭空间
ES5:
(function() {
var a = ;
})(); ES6:
{
let a = ;
} 总结:块级作用域,其实就匿名函数立即调用 const:用来定义常量,一旦赋值,再也修改不了;const 定义常量,声明的时候必须有初始值。 【字符串】
定义字符串: const str = `继续前行,不忘初心`; 字符串的拼接:
ES5:
'abc'+变量+'def'
ES6:
`abc${变量}def` 【解构赋值】:左边和右边的解构是一样的
var [a,b,c] = [,,];
alert(b); // => 5 var {a,b,c} = {b:,a:,c:}
alert(a); // =>12 json和顺序无关,json是无序的 let [a,[b,c],d] = [,[,],];
console.log(a,b,c,d); // 模式匹配 ==》左侧和右侧格式相同 解构赋值可以给默认值:
ES5:
var a = json.a || ;
ES6:
let {time = , id = } = {}; function getPos() {
return {left: , top:};
} let {left, top} = getPos();
console.log(left, top); 【数组的复制】
》var arr = [,,];
var arr2 = [];
for(var i=; i<arr.length;i++) {
arr2[i] = arr[i]
}
arr2.pop(); // arr不会改变
console.log(arr, arr2) 》let arr = [,,];
let arr2 = Array.from(arr); 》Es6:
let arr = [,,];
let arr2 = [...arr];
arr.pop();
console.log(arr2,arr);
》argument
function show(){
console.log(arguments); // =>arguments是不定参数的数组,只有数组的长度和下标,没有数组的方法,在这里执行数组的arguments.push(5) 会报错
}
function show(...args) {
console.log(args); // 使用超级复制...可以在新数组中使用数组的方法
}
show(,,,); 【map对象】
var map = new Map();
//设置 map.set(name,value);
map.set('a','apple');
map.set('b','banana');
console.log(map); // => {a => apple, b => banana}
//获取 map.get(name);
alert(map.get('a')); // => apple
//删除 map.delelte(name)
map.delelte(a);
console.log(map); 【循环】
ES6中新增: for of 循环,遍历(迭代,循环),整个对象,表现类似于for in,
区别: 可以循环数组,不可以循环json,真正的目的是为了循环map对象 let arr = ['a','b','c','d']; for(var i in arr) {
console.log(i); // 遍历的是数组的索引
} for(let i of arr) {
console.log(i); // 遍历的是数组的每一项
}
---------------------------------------------------
var map = new Map();
map.set('a','apple');
map.set('b','banana');
map.set('c','ccc');
map.set('d','ddd'); // map函数不能使用for in循环
for(let name of map) {
console.log(name); // name代表整个键值对 a,apple 本质是循环了map.entries()
}
// 如果想循环出key 和 value
for(let [key,value] of map) {
console.log(key, value); // a apple
}
// 只循环key 也可以循环数组
for(let key of may.key()) {
console.log(key);
}
// 只循环value
for(let val of map.values()) {
console.log(val)
} 【函数】
ES5:
function show(a) {
return a;
}
show();
ES56:
箭头函数:
.箭头函数中this的指向:this的指向指向window
var a = ;
var json = {
a: ,
b: ,
show: () => {
return this.a;
}
} alert(json.show()); // => 100,因为箭头函数中的this指向了window .箭头函数中arguments不能使用了 对象:对象语法简洁化
单体模式
var person = {
name: 'abc',
age: ,
showName: function() {
alert(this.name);
},
showAge: function() {
alert(this.age);
}
}
// 解决this的指向window的问题
var name = 'abc';
var age = ;
var person ={
name,
age,
showName() {
return this.name;
},
showAge() {
return this.age;
}
} 面向对象:
ES5:
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototye.showName = function() {
return this.name;
}
Person.prototype.showAge = function() {
return this.age;
} var p1 = new Person('json',);
alert(p1.showAge()); ES6:有类class,有构造函数 constructor() class Person { // 类
constructor(name = 'default' , age = ) { // 函数的默认值
this.name = name;
this.age = age;
}
showName() {
return this.name;
}
showAge() {
return this.age;
}
} let p1 = new Person('json',);
let p2 = new Person('lison',); alert(p1.showName == p2.showName); // => true
alert(p1.constructor == p2.constructor); // => true 函数的默认值 function move(obj = '对象必须要填写', json= {}, {time:,easiong='ease-out'} = {}) {
console.log(json);
} move(); 面向对象的继承:
ES5: 子类.prototype = new 父类();
function Worker(name,age) {
Person.apply(this, arguments);
}
Worker.prototype = new Person(); var p1 = new Person('jason',,'要饭的') ES6: 使用super() 来继承父级的构造函数,constructor表示自己独有的,会覆盖父级过来的属性
class Person { // 类
constructor(name = 'default' , age = ) { // 函数的默认值
this.name = name;
this.age = age;
}
showName() {
return this.name;
}
showAge() {
return this.age;
}
}
class Worker extends Person {
constructor(name, age, job = '失业') {
surper(name, age);
this.job = job;
}
showJob() {
return this.job;
}
} let p1 = new Person('aaa',);
let w1 = new Worker('json',); alert(w1.showJob()); // => 失业 //面向对象选项卡
<style media="screen">
#box div{
width:4rem;
height:4rem;
background:#ccc;
border:.01rem solid #;
display:none;
}
#box .on{
background: #f60;
color: aqua
}
</style>
</head>
<body>
<div id="box">
<input type="button" value="aaa" class="on">
<input type="button" value="bbb">
<input type="button" value="ccc">
<div style="display:block;"></div>
<div></div>
<div></div>
</div> <script>
// 面向对象的选项卡
class Tab {
constructor(id) {
this.oBox = document.getElementById(id);
this.aBtn = this.oBox.getElementsByTagName('input');
this.aDiv = this.oBox.getElementsByTagName('div');
this.init();
}
init(){
for(let i=; i<this.aBtn.length; i++){
this.aBtn[i].onclick = function(){
this.hide();
this.show(i);
}.bind(this);
}
}
hide() {
for(let i=; i<this.aBtn.length; i++) {
this.aBtn[i].className = '';
this.aDiv[i].style.display = 'none';
}
}
show(index) {
this.aBtn[index].className = 'on';
this.aDiv[index].style.display = 'block';
}
} new Tab('box'); // 继承(自动播放选项卡)
// 继承
class AutoTab extends Tab {
constructor(id) {
super(id);
setInterval(this.next.bind(this),);
}
next() {
this.iNow++;
if(this.iNow == this.aBtn.length) {
this.iNow = ;
}
this.hide();
this.show(this.iNow);
}
} new Tab('box');
new AutoTab('autoBox'); 【模块化】---也可以解决变量冲突,定义加载顺序
导出:a.js:
const a = ;
export default a; // export default function sum() { // 导出函数的返回值
// return a+b;
// } 引用:
import modA from './a.js'; 导出多个模块:
const a = ;
const b = ; export default { // 相当于导出一个json
a,
b
} 【Promise】协议、承诺 是一个对象,用来异步操作数据(消息)
状态:
pending(等待、处理中) => Resolve(完成、fullFilled)
=> Rejected(拒绝、失败) let p1 = new Promise(function(resolve,reject) { }); p1.then(成功(resolve),失败(reject)); Promise.catch(); // 捕获错误 let p1 = new Promise( (resolve, reject) => {
resolve('成功了');
}); p1.then(function(value) {
console.log(value); // => 成功了
throw '发生错误了';
}).catch( function(err) {
console.log(err); // => 发生错误了
}) Promise.all([p1,p2,p3..]) // 全部,将多个promise对象组合,包装成一个实例 let p1 = Promise.resolve();
let p2 = Promise.reject(); Promise.all([p1,p2]).then(function(res) {
console.log('错误了'+res);
},function(res) {
console.log('错误了'+res);
});
// => 错误了5 只要一个失败就返回失败信息,全部成功才会返回成功信息 Promise.race([p1,p2,p3...]) // 返回一个promise对象,返回的最先执行的promise let p1 = Promise( (resolve, reject) => {
setTimeout(resolve,,'先执行');
});
let p2 = Promise( (resolve, reject) => {
setTimeout(resolve,,'后执行');
}); Promise.race( [ p1, p2] ).then(function(res) {
console.log(res); // => 先执行
}); Promise.reject() // 生成一个错误的Promise
Promise.resolve(value/promise) // 生成一个成功的Promise ,value:成功的值; promise:成功后的promise;
------------------------------------------------------------
// 定义一个最简单的ajax
function ajax(url,fnSucc,fnFail) {
var oAjax = new XMLHttpRequest();
oAjax.open('GET',url,true);
oAjax.send();
oAjax.onload = function() {
if(oAjax.readyState == && oAjax.status == ) {
fnSucc(oAjax.responseText);
}else{
fnFail(oAjax.status);
}
};
}
// 点击按钮从a.txt获取数据,如果成功展示到div中,如果失败,在div中显示错误码
let oBtn = document.getElementById('btn1');
let oDiv = document.getElementById('div1'); oBtn.onclick = function() {
let pro = new Promise( (resolve, reject) => {
ajax('a.txt', function(str) {
resolve(str);
},function(str) {
reject(str);
});
}); pro.then(function(value) {
oDiv.innerHTML = value;
},function(value) {
oDiv.innerHTML = reject;
})
} 【Generrator】 生成器,是一个函数,可以遍历,函数名前面有*,函数内部使用的yield语句,for of函数可以遍历Generrator函数 语法: function* show() { // generrator 函数
yield 'hello';
yield 'world';
yield 'ES6';
} let res = show();
console.log(res.next()); // => Object {value:'Hello',done:false} done 表示还没有结束,执行一次出现一次返回值 如果没有return,最后一次循环会出现 {value:undefined, done:true},如果有return,遇到return显示return的值和done:true // Generrator 函数每次返回一个value和一个done yield语句本身没有返回值,或者每次返回undefined next 可以带参数,给上一个yield function* fn() {
yield ;
yield ;
yield ;
yield ;
yield ;
yield ;
return
} for(let v of fn()) {
document.write(v); // => 123456
}

ES6学习随笔--字符串模板、解构赋值、对象、循环、函数、Promise、Generrator的更多相关文章

  1. ES6学习之变量的解构赋值

    前言:什么是ES6?ECMAScript 6(简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了.其中相比较于ES5新增了诸多的特性,并且ES6可转换为ES5的语法.- ...

  2. ES6 学习笔记 - 变量的解构赋值

    变量的解构赋值 学习资料:ECMAScript 6 入门 数组的解构赋值 基本用法 可以从数组中提取值,按照对应位置,对变量赋值.这种写法属于"模式匹配". let [a, b, ...

  3. ES6学习历程(变量的解构赋值)

    一.数组的解构赋值 1.举几个例子足以理解 let [a, b, c] = [1, 2, 3]; a:1;  b:2;  c:3; let [x, , y] = [1, 2, 3];  x:1   y ...

  4. ES6学习4 变量的解构赋值

    变量的解构赋值 一.数组结构赋值 1.数组结构赋值 let [a, b, c] = [1, 2, 3]; ES6 可以从数组中提取值,按照对应位置,对变量赋值. 1)  本质上,这种写法属于“模式匹配 ...

  5. JavaScript学习笔记 -- ES6学习(三) 变量的解构赋值

    1.解构赋值的定义 在ES6中,允许按照一定模式,从数组和对象中提取值(所谓解构),然后对变量进行赋值. var a = 1; var b = 2; var c = 3; //等价于 var [a, ...

  6. ES6入门之变量的解构赋值(二)

    前言 在上一章 ES6入门之let和const命令中我们对ES6的相关语法已经有了初步了解,上一章中我们主要学习了三大部分的内容,let命令的使用,块级作用域,const命令的使用,那么从本篇博客将进 ...

  7. ES6笔记(3)-- 解构赋值

    系列文章 -- ES6笔记系列 解构赋值,即对某种结构进行解析,然后将解析出来的值赋值给相关的变量,常见的有数组.对象.字符串的解构赋值等 一.数组的解构赋值 function ids() { ret ...

  8. ES6中的变量的解构赋值, 解放我们的双手,实现变量的批量赋值

    ES6--变量的解构赋值 引言 正文 一.数组的解构赋值 解构失败 不完全解构 默认值 二.对象的解构赋值 三.字符串的解构赋值 结束语 引言 变量的解构赋值, 听起来很复杂, 简单点说可以理解成批量 ...

  9. 深入理解ES6(二)(解构赋值)

    变量的解构赋值 (1) 数组的解构赋值 1.基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring ). 只要等号两边的模式相同,左边的变量 ...

随机推荐

  1. 修改chrome插件

    背景 例子为:ModHeader插件,顾名思义可以修改request header的插件,官方地址为:https://chrome.google.com/webstore/detail/modhead ...

  2. 用canvas画布画一个画板

    前段时间,在对H5的回顾中突然对canvas有了感觉,闲来无事便对其进行了一些捯饬.这不,上周我还做了一个好玩的画板呢,废话不多说,直接上代码(PS:翠花,上代码~): HTML部分: <!DO ...

  3. WIN7 PHP环境 WAMP一键安装

    PHP环境自己搭建比较麻烦,需要配置APACHE,PHP,MYSQL,更改一堆.ini文件配置 所以使用一键安装包比较好,省时省力省心. WAMP 是 WIN+APACHE+MYSQL+PHP 一键安 ...

  4. PostMan工具使用之基础篇

    PostMan工具使用之基础篇 一.什么是PostMan Postman一款非常流行的API调试工具.(其他测试工具 Jmeter.soapUI) 二.下载及安装: 1.下载: 下载地址:https: ...

  5. django系列5.5--分组查询,聚合查询,F查询,Q查询,脚本中调用django环境

    一.聚合查询 aggregate(*args, **args) 先引入需要的包,再使用聚合查询 #计算所有图书的平均价格 from django.db.models import Avg Book.o ...

  6. Python3.5 学习一

    初期学习,离不了环境搭建及语言的基本语法等. Python属于动态解析.跨平台. 前期了解了Pyhon环境搭建,在Linux(ubuntu)和windows上都有所学习了解,由于不再当前所学资料教程内 ...

  7. 【Oracle 12c】最新CUUG OCP-071考试题库(55题)

    55.(13-3) choose the best answer: Which statement is true regarding the SESSION_PRIVS dictionary vie ...

  8. CodeChef March Challenge 2019题解

    传送门 \(CHNUM\) 显然正数一组,负数一组 for(int T=read();T;--T){ n=read(),c=d=0; fp(i,1,n)x=read(),x>0?++c:++d; ...

  9. CentOS 7 Apache服务的安装与配置(转)

    https://blog.51cto.com/13525470/2070375 一.Apache简介 Apache 是一个知名的开源Web服务器.早期的Apache服务器由Apache Group来维 ...

  10. SQL 中用户建立与权限授予

    SQL 中用户建立与权限授予 一.原有 如果大家对我的博客动态非常关注的话,应该又看到我弄了一个随机MAN信息的小工具.但是呢,那个工具还有待加强(显示效果不是那么的好). 所以我就希望可以显示一些简 ...