在线编译器: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. mysql 删表引出的问题

    背景 将测试环境的表同步到另外一个数据库服务器中,但有些表里面数据巨大,(其实不同步该表的数据就行,当时没想太多),几千万的数据!! 步骤 1. 既然已经把数据同步过来的话,那就直接delete掉就行 ...

  2. airport 抓包

    链接airport命令: ln -s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources ...

  3. 清除浏览器缓存meta标签

    <meta http-equiv="Cache-Control" content="no-cache" /> <meta http-equiv ...

  4. Java基础知识点1

    运算符 运算符的分类: 算术运算符 赋值运算符 关系运算符 逻辑运算符 位运算符 三目运算符 自增自减运算符:++i:i先自加,再做其他运算:i++先运算再自加: --i先自减再做其他运算:i--先运 ...

  5. 回去看linux的指令1

    SYNC CL : MSM8953 @ CL#:12212299 PROJECT PATH : // Platform / N / NILE / COMBINATION / MSM8953 Cross ...

  6. windows挂载网络盘

    @echo offset filename=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%set filename="DataBak-%filename%"ne ...

  7. C - Oil Deposits(dfs)

    点击打开链接 Oil Deposits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  8. Servlet(汇聚页)

    Servlet(汇聚页) --------------------------------------------------------------------------------------- ...

  9. git 使用merge 对本地分支进行合并 并进行代码提交的流程

    1.只有当将修改内容commit后 该修改才完全生效,进行merge前需要将两个分支修改的内容都进行commit 2.假设本地两个分支   用于开发的分支:dev    用于同步远程仓库的分支:mas ...

  10. 喝最烈的酒、挖最大的DONG——工具与技巧篇

    本文作者:i春秋签约作家——黑色镰刀 0×00 前言 在这个科技发达的时代,很多时候工具都可以代替人做很多事情,之前我就有谈起过有企业将人工智能运用于网络安全方面,像如今,也有更多更人性化更智能的工具 ...