(1)新的变量声明方式let/const(不具备变量提升,不可重复声明)
let:声明的变量仅在块级作用域内有效
const:常量,值一旦定义不可更改;声明时要赋初值
(2)解构赋值:对象/数组赋值
对象赋值:对象根据属性名一一对应,无序对应
首先有这么一个对象const props = {
className: 'tiger-button',
loading: false,
clicked: true,
disabled: 'disabled'
}
// es5
var loading = props.loading;
var clicked = props.clicked;
// es6
const { loading, clicked } = props;
数组赋值:数组以序列号一一对应,有序对应;允许指定默认值;内部使用严格相等运算符(===)
// es6
const arr = [1, 2, 3];
const [a, b, c] = arr;
// es5
var arr = [1, 2, 3];
var a = arr[0];
var b = arr[1];
var c = arr[2];
(3)字符串的遍历:for...of循环遍历
for(let codePointAt of 'hicai'){
console.log(codePointAt);
} // h i c a i
遍历对象用for...in
(4)箭头函数:
// es5 写法
var fn = function(a, b) {
return a + b;
}
// es6 箭头函数写法,当函数直接被return时,可以省略函数体的括号{}
const fn = (a, b) => { a + b }; // {}可以省略
箭头函数可以替换函数表达式,但是不能替换函数声明;
箭头函数本身没有this,其中的this指的是外层的this;
箭头函数不可以使用arguments对象,该对象在函数体内不存在;
不可以使用yield命令,因此箭头函数不能用作Generator函数。
(5)字符串模板:为了解决+号拼接字符串的不便利。用 ` `包裹字符串,在其中用${}包裹变量或表达式。
// es6const a = 20;const b = 30;const string = `${a}+${b}=${a+b}`;
// es5var a = 20;var b = 30;var string = a + "+" + b + "=" + (a + b);
(6)展开运算符:(提高代码效率)
ES6中用...来表示展开运算符,可以将数组方法或者对象方法进行展开;
数组:
const arr1 = [1, 2, 3];
const arr2 = [...arr1, 10, 20, 30];
// 这样,arr2 就变成了[1, 2, 3, 10, 20, 30];
对象:
const obj1 = {a:1,b:2,c:3}
const obj2 = {
...obj1, d: 4, e: 5, f: 6
}
// 结果类似于 const obj2 = Object.assign({}, obj1, {d: 4})
(7)class:
在js中,每个对象都有原型对象,所有js对象都从原型上继承方法和属性;
ES5中,属性放在构造函数constructor里,方法放在原型prototype上;
ES6中引入类class来代替构造函数constructor;还提供了extends划分super关键字;
(8)promise对象:解决异步编程
特点:a)对象的状态不受外界影响,promise对象代表一个异步操作,有三种状态:pending(进行中)、resolve(成功)、rejected(失败)
一旦状态改变,就不会改变
基本用法:
Promise构造函数的两个参数是resolve和reject;
Promise实例生成后,可以用then方法分别制定resolve和rejected状态的回调函数;
Promise的then方法是定义在原型对象Promise.prototype上的,then方法返回的是一个新的Promise实例,不是原来那个Promise实例,因此可以用链式写法;
方法1:Promise.all()方法用于将多个promise实例包装成一个新的promise实例;
方法2:Promise.race()方法只要有一个peomise执行完毕就执行
(9)模块化CommonJs
(11)Set和Map数据结构:
Set
a)Set实例成员值唯一存储key值,map实例存储键值对(key-value)
b)Set实例的方法分为两大类:操作方法(用于操作数据)和遍历方法(用于遍历成员)。
操作方法:
add(value):添加某个值,返回Set结构本身
delete(value):删除某个值,返回布尔值
has(value):返回布尔值,表示该值是否为Set的成员
clear():清除所有成员,没有返回值
遍历方法:
keys():返回键名
values():返回键值
entries():返回键值对
forEach():使用回调遍历每个成员
Map
a)Map的键实际上是跟内存地址绑定的,只要内存地址不一样,就视为两个键;
b)Map实例的属性和操作方法:
size属性:返回Map结构的成员总数;
set(key, value):设置键名key对应的键值为value,然后返回整个Map结构,若key已有值,则更新键值,否则生成该键。
get(key):读取key对应的键值
has(key):返回布尔值,表示某个键是否存在当前map对象中。
delete(key):删除某个键,返回true,删除失败返回false
clear():其清除所有成员,没有返回值
c)map的遍历方法:
keys():返回键名
values:返回键值
entries:返回所有成员
forEach():遍历map的所有成员,map的遍历顺序就是插入顺序
(12)Symbol:新的数据类型,表示独一无二的值,不会与其他属性名产生冲突;
Symbol值通过Symbol函数生成;
let s = Symbol();
typeof s; // “symbol”
Symbol函数前不能使用new命令,
Symbol值不是对象,所以不能添加属性;
Symbol函数可以接受一个字符串为参数,表示对当前Symbol实例的描述,因此相同参数的Symbol函数的返回值是不相等的;
- ES6中常用的小技巧,用了事半功倍哦
ES6中常用的小技巧,如果能在实际项目中能使用到,必定事半功倍: 1. 强制要求参数 ES6提供了默认参数值机制,允许你为参数设置默认值,防止在函数被调用时没有传入这些参数. 在下面的例子中,我们写了 ...
- 一个基于ES6+webpack的vue小demo
上一篇文章<一个基于ES5的vue小demo>我们讲了如何用ES5,vue-router做一个小demo,接下来我们来把它变成基于ES6+webpack的demo. 一.环境搭建及代码转换 ...
- 金三银四求职季,前端面试题小梳理(HTML、CSS、JS)
好久没写学习记录,最近太多事,又到一年求职季,都说金三银四求职季,自己也做一下最近学习的一些前端面试题梳理,还是个小白,写的不对请指正,不胜感激. HTML篇 html语义化 用语义化的代码标签书写, ...
- ES6必须 知道的小知识
1.函数的默认参数 一般 我们给函数设置默认参数的时候 会在函数里用 || 运算符 比如 function show(width,height ....){ var height = height ...
- mongodb 修改数据结构的一个例子以及小梳理
mongodb的存储结构是灵活可变的,但是,并不意味着我们就肆意地使用不规则的文档结构.不规则的文档结构对于开发和后期的维护都是一个灾难.所以,还是要有一个约定的格式. 但是,由于前期设计的不周详和其 ...
- SSRF小梳理
SSRF(Server-Side Request Forgery:服务器端请求伪造)是一种由攻击者构造形成由服务端发起请求的一个安全漏洞.一般情况下,SSRF攻击的目标是从外网无法访问的内部系统.(正 ...
- 一个基于ES5的vue小demo
由于现在很多vue项目都是基于ES6开发的,而我学vue的时候大多是看vue官网的API,是基于ES5的,所以对于刚接触项目的我来说要转变为项目的模块化写法确实有些挑战.因此,我打算先做一个基于ES5 ...
- 微信小程序爬坑日记
新公司上手小程序.30天,从入门到现在,还没放弃... 虽然小程序发布出来快一年了,爬坑的兄弟们大多把坑都踩平了.而我一直停留在"Hello World"的学习阶段.一来没项目,只 ...
- 微信小程序踩坑集合
1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434678461 2:简易教程:https://mp.weixin.qq.com/debu ...
- flask_SQLALchemy之多表查询
1. join 查询 假设这样一个业务场景,知道一个邮箱地址,要查询这个地址所属的用户,第一个办法是用连接多个 filter() 来查询. for u, a in session.query(User ...
- Javascript高级编程学习笔记(11)—— 垃圾回收机制
垃圾回收机制 垃圾回收机制,是保证脚本能长时间运行的重要机制 JS具有自动垃圾收集机制,也就是说执行环境会负责管理代码执行过程中使用的内存 与一些偏底层的语言(c.c++)不同,我们不需要手工地去管理 ...
- JS应用实例2:轮播图
在学习轮播图之前,要先会切换图片: 找三张图片,命名1.jpg,2.jpg,3.jpg 示例: <!DOCTYPE html> <html> <head> < ...
- 日志查看技巧之筛选&去重[排查篇]
引语:相信大家都会偶尔遇到要排查问题发生的原因的情况,那这种时候,我们最有力后盾就是日志文件了,所以谨记日志记录真的很重要.但是日志文件往往是很大的文件,而且里面有太多的东西可能不是我们需要的,如无数 ...
- 测试工具之Jmeter(使用badboy录制脚本)
前面使用badboy工具时说过,badboy是可以录制Jmeter的测试脚本,这样省去了自己设计测试用例的麻烦 Jmeter主要是一个性能测试工具,不光在web和http,现在扩展很多功能都可以在Jm ...
- 如何开始DDD
在开始DDD之前,你需要了解DDD的一些基础知识,聚合(AggregateRoot).实体(Entity).值对象(ValueObject),工厂(Factory),仓储(Repository)和领域 ...
- odoo开发笔记 -- 后台日志输出及分析
odoo开发笔记 -- 后台日志输出及分析 附:日志分析软件
- java中的字符、字符串及数字之间的转换(转)
一.string 和int之间的转换 1.string转换成int :Integer.valueOf("12") 2.int转换成string : String.valueOf( ...
- hive中的子查询改join操作(转)
这些子查询在oracle和mysql等数据库中都能执行,但是在hive中却不支持,但是我们可以把这些查询语句改为join操作: -- 1.子查询 select * from A a where a.u ...
- JAVA代理分析
JAVA的动态代理 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类 ...