es6增强的功能有哪些


本篇内容介绍了“es6增强的功能有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! es6增强的功能:1、解构赋值,允许按照一定的模式,从数组或对象中提取值,给变量进行赋值。2、为字符串添加了遍历器接口,使得字符串可以被”for…of循环遍历。3、模板字符串,是增强版的字符串。4、标签模板,是函数调用的一种特殊形式。5、为函数的参数设置默认值。6、箭头函数的this指向上级作用域。7、允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。es6允许按照一定的模式,从数组或对象中提取值,给变量进行赋值,称为解构赋值。解构赋值在代码书写上简单易懂,语义清晰明了,方便对复杂对象中数据字段的获取。在解构中,解构的源,位于解构赋值表达式的右边,而解构的目标,在解构表达式的左边。(1),数组的解构赋值ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。

let[foo,[[bar],baz]]=[1,[[2],3]];
foo//1
bar//2
baz//3

let[,,third]=["foo","bar","baz"];
third//"baz"

let[x,,y]=[1,2,3];
x//1
y//3

let[head,...tail]=[1,2,3,4];
head//1
tail//[2,3,4]

let[x,y,...z]=['a'];
x//"a"
y//undefined
z//[]

本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。
解构不成功,值会等于undefined。另一种情况是不完全解构,即等号左边的模式,只匹配一部分的等号右边的数组。这种情况下,解构依然可以成功。对于 Set 结构,也可以使用数组的解构赋值。

let[x,y,z]=newSet(['a','b','c']);
x//"a"

解构赋值允许指定默认值

let[foo=true]=[];
foo//true
let[x,y='b']=['a'];//x='a',y='b'
let[x,y='b']=['a',undefined];//x='a',y='b'
let[x=1]=[null];x//null

注意,ES6 内部使用严格相等运算符(===),判断一个位置是否有值。所以,只有当一个数组成员严格等于undefined,默认值才会生效。如果一个数组成员是null,默认值就不会生效,因为null不严格等于undefined。

functionf(){
console.log('aaa');
}
let[x=f()]=[1];

注意,ES6 内部使用严格相等运算符(===),判断一个位置是否有值。所以,只有当一个数组成员严格等于undefined,默认值才会生效。如果一个数组成员是null,默认值就不会生效,因为null不严格等于undefined。
上面代码中,因为x能取到值,所以函数f根本不会执行。上面的代码其实等价于下面的代码。(2),对象的解构赋值对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。

let{bar,foo}={foo:'aaa',bar:'bbb'};
foo//"aaa"
bar//"bbb"
let{baz}={foo:'aaa',bar:'bbb'};
baz//undefined

对象的解构赋值,可以很方便地将现有对象的方法,赋值到某个变量。

//例一
let{log,sin,cos}=Math;

//例二
const{log}=console;
log('hello')//hello

上面代码的例一将Math对象的对数、正弦、余弦三个方法,赋值到对应的变量上,使用起来就会方便很多。例二将console.log赋值到log变量。

let{foo:baz}={foo:'aaa',bar:'bbb'};
baz//"aaa"
foo//error:fooisnotdefined

上面代码中,foo是匹配的模式,baz才是变量。真正被赋值的是变量baz,而不是模式foo。

对象的解构赋值,可以很方便地将现有对象的方法,赋值到某个变量。
上面代码的例一将Math对象的对数、正弦、余弦三个方法,赋值到对应的变量上,使用起来就会方便很多。例二将console.log赋值到log变量。
上面代码中,foo是匹配的模式,baz才是变量。真正被赋值的是变量baz,而不是模式foo。
对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。与数组一样,解构也可以用于嵌套结构的对象。

letobj={
p:[
'Hello',
{y:'World'}
]
};

let{p:[x,{y}]}=obj;
x//"Hello"
y//"World"

对象的解构也可以指定默认值。

var{x=3}={x:undefined};
x//3

var{x=3}={x:null};
x//null

(3),字符串的解构赋值类似数组的对象都有一个length属性,因此还可以对这个属性解构赋值。

let{length:len}='hello';
len//5

(4)数值和布尔值的解构赋值解构赋值时,如果等号右边是数值和布尔值,则会先转为对象。

let{toString:s}=123;
s===Number.prototype.toString//true

let{toString:s}=true;
s===Boolean.prototype.toString//true

(5),函数参数的解构赋值

functionadd([x,y]){
returnx+y;
}

add([1,2]);//3

(6),用途1)交换变量的值

letx=1;
lety=2;
[x,y]=[y,x];

2)从函数返回多个值
函数只能返回一个值,如果要返回多个值,只能将它们放在数组或对象里返回。有了解构赋值,取出这些值就非常方便。

//返回一个数组

functionexample(){
return[1,2,3];
}
let[a,b,c]=example();

//返回一个对象

functionexample(){
return{
foo:1,
bar:2
};
}
let{foo,bar}=example();

3)函数参数的定义
解构赋值可以方便地将一组参数与变量名对应起来。

//参数是一组有次序的值
functionf([x,y,z]){...}
f([1,2,3]);

//参数是一组无次序的值
functionf({x,y,z}){...}
f({z:3,y:2,x:1});

4)提取 JSON 数据
解构赋值对提取 JSON 对象中的数据,尤其有用。

letjsonData={
id:42,
status:"OK",
data:[867,5309]
};

let{id,status,data:number}=jsonData;

console.log(id,status,number);
//42,"OK",[867,5309]

5)遍历 Map 结构
任何部署了 Iterator 接口的对象,都免费云主机域名可以用for…of循环遍历。Map 结构原生支持 Iterator 接口,配合变量的解构赋值,获取键名和键值就非常方便。

constmap=newMap();
map.set('first','hello');
map.set('second','world');

for(let[key,value]ofmap){
console.log(key+"is"+value);
}
//firstishello
//secondisworld

如果只想获取键名,或者只想获取键值,可以写成下面这样。

//获取键名
for(let[key]ofmap){
//...
}
//获取键值
for(let[,value]ofmap){
//...
}

如果只想获取键名,或者只想获取键值,可以写成下面这样。
ES6 加强了对 Unicode 的支持,允许采用uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码点。

"uD842uDFB7"
//"?"
"u20BB7"
//"7"

ES6 对这一点做出了改进,只要将码点放入大括号,就能正确解读该字符。(1)字符串的遍历器接口ES6 为字符串添加了遍历器接口,使得字符串可以被for…of循环遍历。

for(letcodePointof'foo'){
console.log(codePoint)
}
//"f"
//"o"
//"o"

(2)模板字符串模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。

//普通字符串
`InJavaScript'n'isaline-feed.`

//多行字符串
`InJavaScriptthisis
notlegal.`

console.log(`stringtextline1
stringtextline2`);

//字符串中嵌入变量
letname="Bob",time="today";
`Hello${name},howareyou${time}?`

大括号内部可以放入任意的 JavaScript 表达式,可以进行运算,以及引用对象属性。

letx=1;
lety=2;

`${x}+${y}=${x+y}`
//"1+2=3"

`${x}+${y*2}=${x+y*2}`
//"1+4=5"

letobj={x:1,y:2};
`${obj.x+obj.y}`
//"3"

模板字符串之中还能调用函数。如果大括号中的值不是字符串,将按照一般的规则转为字符串。比如,大括号中是一个对象,将默认调用对象的toString方法。

functionfn(){
return"HelloWorld";
}

`foo${fn()}bar`
//fooHelloWorldbar

大括号内部可以放入任意的 JavaScript 表达式,可以进行运算,以及引用对象属性。
模板字符串之中还能调用函数。如果大括号中的值不是字符串,将按照一般的规则转为字符串。比如,大括号中是一个对象,将默认调用对象的toString方法。
字符串的新增方法1,String.fromCodePoint()
ES5 提供String.fromCharCode()方法,用于从 Unicode 码点返回对应字符,但是这个方法不能识别码点大于0xFFFF的字符。2,String.raw()
ES6 还为原生的 String 对象,提供了一个raw()方法。该方法返回一个斜杠都被转义(即斜杠前面再加一个斜杠)的字符串,往往用于模板字符串的处理方法。

String.raw`Hin${2+3}!`
//实际返回"Hin5!",显示的是转义后的结果"Hin5!"

String.raw`Hiu000A!`;
//实际返回"Hiu000A!",显示的是转义后的结果"Hiu000A!"

3, 实例方法:includes(), startsWith(), endsWith()

3, 实例方法:includes(), startsWith(), endsWith()
传统上,JavaScript 只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中。ES6 又提供了三种新方法。includes():返回布尔值,表示是否找到了参数字符串。
startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。

lets='Helloworld!';

s.startsWith('Hello')//true
s.endsWith('!')//true
s.includes('o')//true

(1)标签模板标签模板其实不是模板,而是函数调用的一种特殊形式。“标签”指的就是函数,紧跟在后面的模板字符串就是它的参数。

leta=5;
letb=10;
functiontag(s,v1,v2){
console.log(s[0]);
console.log(s[1]);
console.log(s[2]);
console.log(v1);
console.log(v2);
return"OK";
}
tag`Hello${a+b}world${a*b}`;
//"Hello"
//"world"
//""
//15
//50
//"OK"

(2)函数参数增强:参数默认值ES6 允许为函数的参数设置默认值,即直接写在参数定义的后面。

functionlog(x,y='World'){
console.log(x,y);
}

log('Hello')//HelloWorld
log('Hello','China')//HelloChina
log('Hello','')//Hello

(3)箭头函数的简化箭头函数的this指向上级作用域

constname='tony'
constperson={
name:'tom',
say:()=>console.log(this.name),
sayHello:function(){
console.log(this.name)
},
sayHi:function(){
setTimeout(function(){
console.log(this.name)
},500)
},
asyncSay:function(){
setTimeout(()=>console.log(this.name),500)
}
}
person.say()//tony
person.sayHello()//tom
person.sayHi()//tony
person.asyncSay()//tom

ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。除了属性简写,方法也可以简写。

constfoo='bar';
constbaz={foo};
baz//{foo:"bar"}

//等同于
constbaz={foo:foo};
consto={
method(){
return"Hello!";
}
};

//等同于

consto={
method:function(){
return"Hello!";
}
};

1、如果key与value变量名相同,省略:value

1、如果key与value变量名相同,省略:value
2、省略函数:function
3、计算属性:[Math.random()]

constbar='bar'
constobj={
bar,
fn(){
console.log('1111')
},
[Math.random()]:'123'
}
console.log(obj)

“es6增强的功能有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注百云主机网站,小编将为大家输出更多高质量的实用文章!

相关推荐: 如何使用vue实现双向绑定

这篇文章主要讲解了“如何使用vue实现双向绑定”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用vue实现双向绑定”吧!1.使用v-model指令实现双向绑定2.利用.sync修饰符实现双向绑定3.使用mo…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 02/23 12:19
Next 02/23 12:20

相关推荐