内容:

1.变量及赋值

2.函数

3.数组及json

4.字符串

5.面向对象

6.Promise

7.generator

8.模块

1.变量及赋值

(1)ES5变量定义

var:     可以重复定义、不能限制修改、没有块级作用域  --> 不再建议使用

(2)ES6新增变量定义

新时代的js建议使用以下来定义变量:

  • let 不能重复定义、变量、块级作用域
  • const 不能重复定义、常量、块级作用域

(3)赋值

 解构赋值:
1.左右两边必须一样;右边得是个东西
2.必须定义和赋值同步完成
 let [a, b, c] = [1, 2, 3];
// let {a, b, c} = {a: 1, b: 2, c: 3};
alert(a+b+c); // 输出6
 let [n1, {a, b, c}, n2] = [12, {a: {n1: 5, n2:8}, b: 12, c: 88}, 55];
console.log(n1, a, b, c, n2);
// 输出: 12 {n1: 5, n2: 8} 12 88 55

2.函数

(1)箭头函数

箭头函数就是匿名函数定义的简化版, 宣称能使得代码更简洁,实际上就是纯粹的垃圾
箭头函数的 this 值是绑定了的,箭头函数没有 arguments 对象,如果要多参数, 必须用 ...

 1 // (参数1, 参数2) => { 语句 }
2 // (参数1, 参数2) => 语句
3 // 上面两行相当于下面这函数
4 function(参数1, 参数2) {
5 return 语句
6 }
7
8 // 如果只有一个参数,圆括号可省略的
9 // (参数1) => { 语句 }
10 // 参数1 => { 语句 }
11
12 // 但是如果没有参数, 必须需要使用圆括号
13 // () => { 语句 }
14
15 // 例子
16 var a1 = [1, 2, 3]
17 // 下面两个等价
18 var a2 = a1.map(function(n){
19 return n * n
20 })
21 var a3 = a1.map( n => n * n )
22
23 n => n * n
24 // 上面 1 行等价于下面 3 行
25 function(n) {
26 return n * n
27 }

(2)默认参数

 // 传统写法
var test = function(a, b, c){
b = b||5;
c = c||12;
console.log(a, b, c); // 1, 5, 12
}
test(1); // ES6写法:
var test = function(a, b=5, c=12){
console.log(a, b, c); // 1, 5, 12
}
test(1);

(3)参数展开(剩余参数)

接受剩余参数如下:

 var test = function(a, b, ...args){
// 第一个和第二个参数传给a和b其他参数传给args
console.log(a, b, args);
} test(1, 3, 5, 7, 9); // 1, 3, [5, 7, 9]

注:...args必须在参数最后面

展开一个数组:

 let arr = [111, 222, 333];
let arr2 = [1, 3, 5, ...arr, 7, 9];
console.log(arr2);
// 输出: [1, 3, 5, 111, 222, 333, 7, 9]

3.数组及json

(1)数组 - 5种方法

map 映射:一个 -> 一个

 let arr=[62, 55, 82, 37, 26];

 let arr2=arr.map(function (item){
if(item>=60){
return true;
}else{
return false;
}
}); alert(arr2); // true,false,true,false,false

filter 过滤:

 let arr=[12,5,88,37,21,91,17,24];

 let arr2=arr.filter(function(item){
if(item%2==0){
return item;
}
}); alert(arr2); // 12,88,24

forEach 遍历:

 let arr=[12,5,88,37,21,91,17,24];

 let sum=0;
arr.forEach(function(item){
sum+=item;
}); alert(sum); //

reduce 汇总:一堆 -> 一个

 let arr=[12,5,88,37,21,91,17,24];

 let sum=arr.reduce(function(tmp,item,index){
console.log(tmp, item, index); return tmp+item;
}); console.log(sum); // 结果: 295

array-like对象转换成Array:

在DOM操作中,有时候有一些array-like对象(无法使用forEach方法),可以这样将其转换成真正的Array:

Array.from([array-like]) -> [xxx, xxx, xxx],然后就可以使用forEach方法了

(2)json - 2变化

简写:名字和值一样的,可以省

 let a=12;
let b=5; let json={a, b};
// 上面一句等价于:
// let json={a: a, b: b}; console.log(json); // {a: 12, b: 5}

function可以不写:

 /*let json={
a: 12,
b: 5,
show: function (){
alert(this.a+this.b);
}
};*/ // 下面的和上面的同理
let json={
a: 12,
b: 5,
show(){
alert(this.a+this.b);
}
}; json.show();

4.字符串

字符串模板:

 let json={name: 'wyb', age: 21};

 //alert('我叫:'+json.name+',我今年'+json.age+'岁');
alert(`我叫:${json.name},我今年${json.age}岁`);

多行字符串:

 let msg = `sf
sdf
dkj
`; alert(msg);

startsWith和endsWith:

 if(sNum.startsWith('135')){
alert('移动');
}else{
alert('联通 or 电信');
} if(filename.endsWith('.txt')){
alert('文本文件');
}else{
alert('其他文件');
}

5.面向对象

(1)基础 构造函数和继承

  • class/constructor
  • extends/super
 // 类的定义:
class Person{
constructor(name, age){
this.name = name;
this.age = age;
} showName(){
alert('我叫' + this.name);
}
showAge(){
alert('我' + this.age + '岁');
}
} let p = new Person('wyb', 21); p.showName();
p.showAge();
 // 类的继承
class Person{
constructor(name, age){
this.name = name;
this.age = age;
} showName(){
alert('我叫' + this.name);
}
showAge(){
alert('我' + this.age + '岁');
}
} class Worker extends Person{
constructor(name, age, job){
//super-超类(父类)
super(name, age);
this.job = job;
} showJob(){
alert('我是做:' + this.job);
}
} let w = new Worker('wyb', 21, '打杂的'); w.showName();
w.showAge();
w.showJob();

(2)this

  • 普通函数:根据调用我的人 this老变
  • 箭头函数:根据所在的环境 this恒定
  • bind——给函数定死一个this

6.Promise

Promise - 异步、同步化  ->  用同步的方式去写异步

  • promise:解决异步操作
  • 同步——串行 简单、方便
  • 异步——并发 性能高、体验好

Promise用法:

 let p=new Promise((resolve, reject)=>{
resolve(); reject();
5 }); 7 p.then(()=>{}, ()=>{}); // 第一个函数为resolve 第二个函数为reject

Promise使用实例:

  • Promise.all(); 与:所有的都成功
  • Promise.race(); 或:只要有一个完成
 //Promise -> 用同步的方式实现异步
Promise.all([
$.ajax('/banner_data'),
$.ajax('/item_data'),
$.ajax('/user_data'),
$.ajax('/news_data'),
]).then(function(arr){
let [banners, items, user, news]=arr;
}, function(){});
// then方法第一个函数为resolve函数(成功) 第二个函数为reject函数(失败)

注意:

  • Proimse有用——解除异步操作
  • Promise有局限——带逻辑的异步操作麻烦

7.generator

generator - 生成器  --》 能暂停

简单实例 :

 // 生成器函数
function *show(){
alert('aaa');
yield; // 暂停
alert('bbb');
} let gen = show(); gen.next(); // aaa setTimeout(function (){
gen.next(); // bbb
}, 5000);

yield实例:

 // yield:
// 1.可以传参数 function (a, b, c)
// 2.可以返回 return // yield返回值
function *show(){
alert('aaa');
let a=yield;
alert('bbb'+a);
} let gen=show(); gen.next(); // aaa
gen.next(12); // bbb12 // yield传值:
function *show(){
alert('aaa');
yield 55; alert('bbb');
return 89;
} let gen=show(); let res1=gen.next();
console.log(res1); //{value: 55, done: false} let res2=gen.next();
console.log(res2); //{value: 89, done: true}

generator+promise配合(并不常用):

1.外来的runner辅助执行——不统一、不标准、性能低
2.generator函数不能写成箭头函数

补充 - async/await - 常用:

大致写法:

 // async写法:
async function xxx(){
....
let res=await xx;
....
let res2=await xxx;
// let 结果=await 异步操作;(异步操作可以是promise、generator、另一个async函数其中的任意一个)
....
}

实例(async使用及错误处理):

 async function show(){
try{
let data1=await $.ajax({url: '1.txt', dataType: 'json'});
let data2=await $.ajax({url: '33.txt', dataType: 'json'});
let data3=await $.ajax({url: '3.txt', dataType: 'json'}); console.log(data1, data2, data3);
}catch(e){
alert('有问题'); throw new Error('错了....');
}
} show();

8.模块化ES6

打包、编译:

  • 编译:ES6 -> ES5  使用babel
  • 打包: browserify

(1)babel

最初作为一个polyfill工具使用,只是用来扩充浏览器的功能,可以用来将ES6编译成ES5

babel官网:http://babeljs.io/,babel需要node.js,使用babel之前要先安装node,node官网:https://nodejs.org/en

node:语言、环境、平台    node的npm:包管理(类似python的pip)

安装使用babel:

  • 替换源:npm install -g cnpm --registry=https://registry.npm.taobao.org
  • 项目初始化:cnpm init
  • 在项目中下载babel:cnpm install --save-dev babel-cli
  • 安装之后,改写package.json包(配置文件)如下:
 {
//...略去了其他的内容
"devDependencies": {
"babel-cli": "^6.0.0" //这里的版本号为安装的时候的版本号,一般安装的时候就会自动写入
},
"scripts": {
"build": "babel src -d lib"
//编译整个 src 目录并将其输出到 lib 目录。这里的src指的是需要转换的目录,lib指的是输出的内容的存放目录
},
}

然后在项目中新建.babelrc然后配置babelrc:

 {
"presets": ["env"]
}

然后执行:cnpm i babel-preset-env -D

最后编译:npm run build

 // 编译前的代码:
let a=12;
let [b,c]=[5,8]; const show=()=>{
alert(a+b+c);
}; show(); // 编译后的代码:
"use strict"; var a = 12;
var b = 5,
c = 8; var show = function show() {
alert(a + b + c);
}; show();

(2)browserify

browesrify -> 和模块化配合一起用

ES6进一步整理的更多相关文章

  1. ES6知识整理(4)--数组的扩展

    最近工作比较忙,基本每天都会加班到很晚.处理一些客户端兼容问题以及提升用户体验的优化.也将近一周没更文了,现在继续es6的学习总结. 上篇回顾 ES6知识整理(三)--函数的扩展 扩展运算符 形式是3 ...

  2. ES6知识整理(1)--let和const命令

    最近准备在业余空闲时间里一边学习ES6,一边整理相关知识.只有整理过的学习才是有效的学习.也就是学习之后要使用和整理成文,才是正在的学到了... 那么现在开始 LINK START!(首先是第一讲,前 ...

  3. ES6知识整理(3)--函数的扩展

    只有整理过的学习才是有效的学习.也就是学习之后要使用和整理成文,才是真正的学到了... 最近上班有点忙的关系,于是文章更新会慢些.只有晚上加完班之后,空余时间才能学习整理.因此完成一篇也可能要几个晚上 ...

  4. ES6知识整理(2)--变量的解构赋值

    最近准备在业余空闲时间里一边学习ES6,一边整理相关知识.只有整理过的学习才是有效的学习.也就是学习之后要使用和整理成文,才是真正的学到了... 上一篇是一个试水,现在接上. 变量提升 看了下朋友回复 ...

  5. ES6知识整理(10)--class的继承

    (这是es6的第10篇文章.说真的这样的总结之后虽然直观了许多,但是消耗的时间有点长,或许是知识比较复杂的原因吧) 类的继承 有个A类,B类继承A类,那B类实例就可以使用A类实例的所以属性和方法.不包 ...

  6. ES6知识整理(9)--class的基本语法

    (总结完知识点,出去滑板刷街) promise的catch 上一节promise中漏了一个知识点: promise对象可以使用catch来避免每个then中都加error判断,让错误时都进到catch ...

  7. ES6知识整理(8)--Promise对象

    (关于promise,以前并不知道是什么,没这个概念.现在来学习总结下) promise含义 es6的异步编程解决方案.需要new新对象操作api. promise对象特点 有3中状态:pending ...

  8. ES6知识整理(5)--对象的扩展

    个人开这个公众号的初心是为了积累知识,因此并没有做什么推广,再说自己也不知道怎么推广,推广之后又能干些什么.已经将近10天没发文章了,虽然每天都加班,但也不会一点时间都没有,有时还是会懒癌发作不想学习 ...

  9. es6 + 笔记整理

    1. ES6提供了默认参数值机制,允许你为参数设置默认值,防止在函数被调用时没有传入这些参数: const required = () => {throw new Error('Missing ...

随机推荐

  1. 51Nod 1002:数塔取数问题(DP)

    1002 数塔取数问题  基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 一个高度为N的由正整数组成的三角形,从上走到下,求经过的数字和的最大值. 每 ...

  2. C# Dictionary源码剖析

    参考:https://blog.csdn.net/exiaojiu/article/details/51252515 http://www.cnblogs.com/wangjun1234/p/3719 ...

  3. node启动时候报错 Error: Cannot find module 'express'

    cmd命令  到目录下,然后运行 npm install -d 再 node hello.js

  4. 网络流--最小费用最大流MCMF模板

    标准大白书式模板 #include<stdio.h> //大概这么多头文件昂 #include<string.h> #include<vector> #includ ...

  5. (1)集合 ---遍历map集合

    Map接口     实现Map接口的类用来存储键(key)-值(value) 对.Map 接口的实现类有HashMap和TreeMap等.Map类中存储的键-值对通过键来标识,所以键值不能重复. Ha ...

  6. test20181004 排列

    题意 分析 容斥公式的意义 选了原图中\(x(x \geq i)\)条边的方案,重复了\(\binom{x}{i}\)次. 有多加多减,所以就是那个式子. 具体而言,对选了x条原图中的边的方案,总共加 ...

  7. 使用Spring Boot操作Hive JDBC时,启动时报出错误:NoSuchMethodError: org.eclipse.jetty.servlet.ServletMapping.setDef

    使用Spring Boot操作Hive JDBC时,启动时报出错误:NoSuchMethodError: org.eclipse.jetty.servlet.ServletMapping.setDef ...

  8. TensorFlow笔记-05-反向传播,搭建神经网络的八股

    TensorFlow笔记-05-反向传播,搭建神经网络的八股 反向传播 反向传播: 训练模型参数,在所有参数上用梯度下降,使用神经网络模型在训练数据上的损失函数最小 损失函数:(loss) 计算得到的 ...

  9. java 创建子类

    当程序创建子类对象时,系统不仅会为该类中定义的实例变量分配内存,也会为他从父类继承得到的所有实例变量分配内存,即使子类中定义了与父类中同名的实例变量. 如: class Parent { privat ...

  10. 共享设置及ftp设置

    第一部分 共享设置 一.添加编译选项 network---file transfer---aria2                                                   ...