ES5和ES6新特性

ES5

1、 严格模式(use strict)

这种模式,使得JavaScript在更严格的语法条件下运行:

(1)变量必须使用var声明;

(2)禁止自定义的函数中的this指向window

(3)创建 eval 作用域即为块级作用域

(4)对象不能有重名的属性

use strict可以在脚本或者函数开头声明,分别具有全局和函数作用域。

2、 增加JSON对象

JSON.stringify(obj/arr);

JSON.parse(json);

3、 扩展了数组Array的方法

Array.isArray()            方法检查对象是否为数组
Array.forEach(funName)     每个数组元素调用一次函数
Array.map(funName)         遍历数组返回一个新数组,返回加工后的值
Array.filter(funName)      遍历过滤出一个新的子数组,返回条件为true的值
Array.reduce(funName)      按funName方法处理数组,最后返回一个值,funName有两个参数,第一个是最后返回的归并值,第二个是元素
Array.reduceRight(funName) 同上,只是从最后一个数据开始计算
Array.every(funName)       遍历数组,检查是否每一个值都符合条件,返回bool    
Array.some(funName)        遍历数组,检查是存在至少一个值符合条件,返回bool
Array.indexOf(value)       检索数组中的某个元素值并返回其位置,多个则返回第一个
Array.lastIndexOf(value)   同上,只是从最后开始检索

4、 对象增加属性 Getter 和 Setter允许使用类似于获取或设置属性的语法来定义对象方法// 创建对象:
var person = {
  firstName: "Bill",
  lastName : "Gates",
  get fullName() {
    return this.firstName + " " + this.lastName;
  }
};
//获取对象
person. fullName

5、 函数扩展Function.prototype.bind(obj)

可将函数内的this绑定为obj,并将函数返回;

ES6

1、 变量声明关键字let、const

let 是在代码块内有效,var 是在全局范围内有效;

let 只能声明一次,无法进行赋值

var 可以声明多次;

let 不存在变量提升,var 会变量提升:

const 用来声明常量,块级作用域,一旦执行无法取消

2、 许函数参数设置默认值

function testAdd(x, y = 10) {
  // 当y不给值或者为undefined时值取10
  return x + y;
}

3、 箭头函数(Arrow Function)

类似于匿名函数,但没有自己的 this,不适合定义对象方法;

如果只是单个语句,则可省略掉return和花括号(但保留一般更好一些)

    例:z = (x, y) => { return x * y };

4、 class 关键字定义类

class 的本质是 function,它可以看作一个语法糖,让对象原型的写法更加清晰、更像面向对象编程的语法;

(1) 声明

class Example {
    constructor(a) {
        this.a = a;
    }
}

(2) 实例化

let exam1 = Example(1);

(3) 修饰器decorator

类比java的注解,是一个函数,用来修改类的行为,在代码编译时产生作用

(4) 其他

类可以继承,使用extends;

constructor 方法是类的默认方法,创建类的实例化对象时被调用;

类定义不会被提升,必须在访问前对类进行定义;

类中方法不需要 function 关键字,类似于java;

Class 内部只有静态方法,没有静态属性;

ES6 引入了模块化,分export与import,模块自动开启了严格模式;

Promise 对象用于异步编程; 

5、 解构赋值

是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值

示例:

数组 let [a, b, c] = [1, 2, 3]; //a,b,c变量值同时赋予了; let [a, , b] = [1, 2, 3]; let [a = 1, b] = []; //不完全解构,a = 1, b = undefined let [a, ...b] = [1, 2, 3]; //剩余运算符,a=1, b=[2,3] (字符串是数组) 对象 let {a, b} = {a : 1, b : 2}; //a=1,b=2 let {a : b} = {a : 1}; //b=1 let {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40};//rest = {c: 30, d: 40}

其他:

扩展了Array方法、对象

代理Proxy对象

function f(...values)可为函数设置不确定个数参数 ,values为最后所有参数的集合

增加for...of循环,用于替代 for..in 和 forEach()

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值