es6去掉字符串里的引号_ES6排名前十位的最佳特性列表和常用的一些语法(排名不分先后)...

本文介绍了ES6的十大最佳特性,包括默认参数、模板文本、多行字符串、解构赋值、增强的对象字面量、箭头函数、Promise、块作用域、类和模块。详细解释了每个特性的用法和优势,例如使用模板文本简化字符串操作,通过箭头函数避免`this`绑定问题,以及利用模块实现代码组织。
摘要由CSDN通过智能技术生成

以下是ES6排名前十位的最佳特性列表(排名不分先后):

  • Default Parameters(默认参数)in ES6;
  • Template Literals(模板文本)in ES6;
  • Multi-line Strings(多行字符串)in ES 6;
  • Destructuring Assignment(解构赋值)in ES 6;
  • Enhanced Object Literals(增强的对象文本)in ES 6;
  • Arrow Functions(箭头函数)in ES6;
  • Promises in ES 6;
  • Block-Scoped Constructs Let and Const(块作用域构造Let and Const);
  • Classes(类)in ES 6;
  • Modules(模块)in ES6
e6aba2da-7341-eb11-8da9-e4434bdf6706.png

Default Parameters(默认参数)

//以前的Javascript原先定义方式var link=function(height,color,url){var height=height || 50;var color=color || 'red';var url=url || 'http:// baidu.com';...}

但在ES6中,可以直接把默认值放在函数声明里:

//新的 JavaScript定义方式var link=function(height=50,color='red',url='http://baidu.com'){...}

Template Literals(模板文本)

//ES6之前只能使用组合字符串方式var name='Your name is' + first + '' +last + '.' ;var url='http://localhost:3000/api/messages/' + id;

在ES6中,可以使用新的语法${NAME},并将其放在反引号里:

//ES6支持模板文本var name=`Your name is ${first} ${last}.`;var url=`http://localhost:3000/api/messages/S{id)`;

Multi-line Strings(多行字符串)

//ES6之前方式只能使用组合字符串Var roadPoem= `江南好,风景旧曾谙。+'日出江花红胜火,+'春来江水绿如蓝。'+'能不忆江南?'+'忆江南·江南好`;

在ES6中,仅用反引号就可以解决了:

//支持多行文本的字符串var roadPoem=`江南好,风景旧曾谙。日出江花红胜火,春来江水绿如蓝。能不忆江南?忆江南·江南好`;

Destructuring Assignment(解构赋值)

从一个简单的赋值讲起,其中 house和mouse是key,同时house和mouse 也是一个变量,在ES5中是这样的:

var data=$('body').data();// data 拥有内个属性 house 和mousehouse=data.house;mouse=data.mouse;

在Node.js中用ES5是这样的:

var jsonMiddleware = require('body-parser').jsonMiddleware;var body=req.body; //body 两个属性 username 和l passwordusername=body.username;password=body.password;

在ES6中,可以使用以下语句来代替上面的ES5代码:

var { house,mouse}=$('body').data();var {jsonMiddleware}=require('body-parser');var {username,password}=req.body;

这个同样也适用于数组

var [coll,co12]=$('.column'),[linel,line2,line3,,line5]=file.split('n');

Enhanced Obiectliterals(增强的对象义牛

通过ES6,可以把ES5中的JSON变得更加接近于一个类。

下面是一个典型的ES5对象文本,里面有一些方法和属性:

//文本对象vat serviceBase=fport:3000,url:'baidu.com"},getaccounts=function(){return [1,2,3]);var accountServiceES 5={port: serviceBase.port,url: serviceBase.url,getAccounts:getAccounts,tostring:function(){return JSON.stringify(this.valueOf());},getUrl:function(){return "http://w+this.url++this.port},valueOf 1_2_3:getAccounts()}

如果开发者想让它更有意思,可以用Object.create从ServiceBase 继承原型的方法:

var accountServiceES 50bjectCreate=Object.create(serviceBase)var accountServiceES 50bjectCreate={getAccounts:getAccounts,toString:function(){return JSON.stringify(this.valueof());},getUrl:function(){return "http://"+this.url+':'+ this.port},valueOf_1_2_3:getAccounts()}

其实对于以上两种 accountServiceES 5ObjectCreate 和accountServiceES 5并不是完全一致的。Object.Create()方法创建一个新对象,其是使用现有的对象来继承创建一个新的对象,而 accountSerivce ES5并且继承现有对象。

在ES 6的对象文本中,既可以直接分配 getAccounts:getAccounts,也可以只需用一个 getAccounts.此外,可以通过 _proto_(并不是通过proto)设置属性:

var serviceBase={port:3000,url:'baidu.com'},getAccounts=function(){return [1,2,3]});var accountService={proto:serviceBase,getAccounts,

另外,可以调用super防范,以及使用动态key值(valueOf_1_2_3):

tostring(){return JSON.stringify((super.valueOf()));},getUrl(){return "http://"+this.url+':'+this.port},[ 'valueOf_ + getAccounts().join('_')]:getAccounts()};console.log(accountService)

对于旧版的对象来说,ES6的对象文本是一个很大的进步

Arrow Functions(箭头函数)

有了箭头函数,就不必用 that=this 或self=this,_this=this,.bind(this)那么麻烦了

var _this=this;$('.btn').click(function(event){_this.sendData();})

在ES6中则不需要用 _this=this:

$('.btn').click((event)=>this.sendData();})

但并不是完全否定之前的方案,ES6委员会决定,以前的 function的传递方式也是一个很好的方案,所以它们仍然保留了以前的功能。

,通过call 传递文本给 logUpperCase()函数,在ES5中:

var logUppercase= function(){var _this= this;this.string=this.string.toUpperCase();return function(){return console.log(_this.string);}}LogUppercase.call({string:'ES 6 rocks'})();

而在ES6中并不需要用 _this浪费时间:

var logUpperCase=function(){this.string= this.string.toUpperCase();return()=> console.log(this.string);}logUpperCase.call({ string:'ES 6 rocks'})();
  • 注意:在ES6中,“》=”可以混合和匹配老的函数一起使用。当在一行代码中用了箭头

函数后,它就变成了一个表达式,其将暗中返回单个语句的结果。如果结果超过一行,将需要明确使用 return。

在箭头函数中,对于单个参数,括号()是可省略的,但当参数超过一个时就需要括号()了。

在ES5代码中有明确的返回功能:

var ids=['5632953c4e345e145fdf2df8','563295464e345e145fdf2df9'];var messages=ids.map(function(value,index,list){return 'ID of'+ index+' element is'+value+'';});

在ES6中有更加严谨的版本,参数需要被包含在括号里并且是隐式地返回:

var ids=['5632953c4e345e145fdf2df8','563295464e345e145fdf2df9'];var messages=ids.map((value,index,list)=>ID of ${index} elementis ${value} '); //隐式返回

Promise实现

下面是一个简单地用 setTimeoutO)函数实现的异步延迟加载凼数:

setTimeout(function(){console.log('Yay!');},1000);

在ES6中,可以用Promise 重写,虽然在此实例中并不能减少大量的代码,甚至多写

了数行,但是逻辑却清晰了不少:

var wait1000= new Promise((resolve,reject)=>{setTimeout(resolve,1000);}).then(()=>{console.log('Yay!');});

块作用域构造let

在ES6里,let并不是一个“花哨”的特性,是更复杂的。let是一种新的变量声明方式,允许我们把变量作用域控制在块级里面,用大括号定义代码块,在ES5中,块级作用域起不了任何作用:

function calculateTotalAmount(vip){var amount=0;if(vip){//在此定义会覆盖var amount=1;}{//在此定义会覆盖var amount=100;{//在此定义会覆盖var amount=1000;}return amount;}//打印输出内容console.log(calculateTotalAmount(true));

以上代码结果将返回1000,这真是一个bug.在ES6中,用let限制块级作用域,而var限制函数作用域。

function calculateTotalAmount(vip){var amount=0;if(vip){//使用let定义的局部变量let amount=1; //第1个1et}{let amount=100; //第2个let{let amount =1000; //第3个let}}return amount;}Console.log(calculateTotalAmount(true));

程序结果将会是0,因为块作用城中有了let,如果(amount=1),那么这个表达式将返回1.

Classes(类)

JavaScript 版本中,对于类的创建和使用是令人非常头疼的一件事,不园直接使用class命名一个类的语言(在JavaScript中class 天键子彼保留,但是没有任甸用),因为没有官方的类功能,加上大量继承模型的出现(pseudo classical,classical,functional等),造成了JavaScript类使用的困难和不规范。

ES6没有用函数,而是使用原型实现类,我们创建一个类baseModel,并且在这个类里定义一个 constructor()和一个getName()方法:

class baseModel {constructor(options,data){// class constructor,Node.js 5.6暂时不支持options={},data=[]这样传参this.name='Base';this.url='http://baidu.com/api';this.data=data;this.options=options;}getName(){ //类的方法console.log(`Class name:${this.name}`);}

这里对options和data使用了默认参数值,方法名也不需要加function 关键子,而且冒号“:”也不需要了;另一个大的区别就是不需要分配属性 this.现在设置一个属性的值,只需简单地在构造函数中分配即可。

Modules(模块)

众所周知,在ES6以前 JavaScript 并不支持本地的模块,于是人们想出了 AMD、RequireJS、CommonJS 及其他解决方法。现在ES6中可以用模块import和export操作了.

在ES5中,可以在

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值