ES6新特性

ES6目前基本为业界的标准,普及速度比ES5快很多,谷歌浏览器和火狐浏览器以及可以支持ES6中的绝大多数的特性。

1.新增变量声明:const、let

ES6推荐使用let:1>声明局部变量,2>没有提上之说,3>变量不能重名,相比之前的var(无论声明在何处,都会被视为声明函数的最顶部)

 在for循环中,let效果实际上是利用了闭包的机制,并且,对于循环块中的let 和 执行块中的let是两个块中分别定义的变量,互不影响。

var x = '全局变量';
{
  let x = '局部变量';
  console.log(x); // 局部变量
}
console.log(x); // 全局变量

for (let i = 0; i < 2; i++) {
        let i = 'foo'
        console.log(i);
    } // foo  foo

const声明的常量,在声明时必须赋值,若const为对象,对象所包含的值时可以修改的,但对象所指向的地址没有改变。两者都为块级作用域。

const student = { name: 'cc' }

student.name = 'yy';// 不报错
student  = { name: 'yy' };// 报错

2.模板字符串

1>ES6基本的字符串格式化。将表达式嵌入字符串中进行拼接。用${}来界定;

2>ES6反引号(``)直接搞定;

$("body").html(`This demonstrates the output of HTML content to the page, 
including student's ${name}, ${seatNumber}, ${sex} and so on.`);

3.箭头函数(简写形式)

1>不需要function关键字来创建函数

2>省略return关键字

3>继承当前上下文的this关键字

4>箭头函数不能用关键字new调用

若函数只有一个参数时,可以省略括号,当函数返回只有一个表达式,可以省略{}和return

// ES5
var add = function (a, b) {
    return a + b;
};
// 使用箭头函数
var add = (a, b) => a + b;

// ES5
[1,2,3].map((function(x){
    return x + 1;
}).bind(this));
    
// 使用箭头函数
[1,2,3].map(x => x + 1);

//闭包:函数节流、防抖
function outer (){
      return function(){return 123};}
//ES6箭头函数
const outer1 = () =>()=>123;

4. 函数的参数的默认值

// ES6之前,当未传入参数时,text = 'default';在函数体中进行定义
function printText(text) {
    text = text || 'default';
    console.log(text);
}

// ES6;在定义参数时直接给出参数的默认值
function printText(text = 'default') {
    console.log(text);
}

printText('hello'); // hello
printText();// default

5.二进制和八进制字面量

ES6支持二进制和八进制的字面量,通过在数字前面添加0O或者0o即可将其转化为八进制。通过0B或0b转化为二进制:

let oValue = 0o10;
console.log(oValue); // 8
 
let bValue = 0b10; // 二进制使用 `0b` 或者 `0B`
console.log(bValue); // 2

5. 对象和数组结构

// 对象的结构
const student = {
    name: 'Sam',
    age: 22,
    sex: '男'
}


// ES5;
const name = student.name;
const age = student.age;
const sex = student.sex;
console.log(name + ' --- ' + age + ' --- ' + sex);

// ES6
const { name, age, sex } = student;
console.log(name + ' --- ' + age + ' --- ' + sex);

//函数调用传参

//ES6新增语法:强制结构
//obj和obj1不相等,因为在内存地址不同
var obj = {
    a:1,
    b:2,
    c:3
    }

var obj1 = {
    ...obj
    }

// 数组的结构
const [a,b,c] = ['Sam', 'yam', 'tom'];
//剩余参数,只能用于最后一个元素使用,包括最后所有数据
const [a,b,...c] = ['Sam', 'yam', 'tom','bob'];
const student = ['Sam', 'yam', 'tom'];
    

7.ES6 中的类 

ES6支持class语法,它不是新的对象继承模型,它只是原型链的语法表现形式。 

class Student {
  constructor() {
    console.log("I'm a student.");
  }
 
  study() {
    console.log('study!');
  }
 
  static read() {
    console.log("Reading Now.");
  }
}
 
console.log(typeof Student); // function
let stu = new Student(); // "I'm a student."
stu.study(); // "study!"
stu.read(); // "Reading Now."
  • 类的声明不会提升,如果你要使用某个 Class,那你必须在使用之前定义它,否则会抛出一个 ReferenceError 的错误
  • 在类中定义函数不需要使用 function 关键词

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值