es6新特性有哪些

2020-09-21 20:48发布

7条回答
爱梦 -拿来吧你
1楼 · 2021-06-29 09:46.采纳回答

es6新特性:

1、向对象添加属性

克隆对象,同时向(浅)克隆对象添加附加属性,如下代码:


const user = { id: 10, name: 'Tom'}const userWithPass = { ...user, password: 'Password!' }user //=> { id: 10, name: 'Tom' }userWithPass //=> { id: 10, name: 'Tom', password: 'Password!' }


2、合并对象

我们通过举个例子来说明是如何操作的:


const part1 = { id: 10, name: 'Howard Moon' }const part2 = { id: 11, password: 'Password!' }const user1 = { ...part1, ...part2 }//=> { id: 10, name: 'Howard Moon', password: 'Password!' }


const partial = { id: 100, name: 'Howard Moon' }const user = { ...partial, id: 100, password: 'Password!' }user //=> { id: 100, name: 'Howard Moon', password: 'Password!' }


3、删除对象的属性

可以结合REST运算符使用析构来删除属性。


onst noPassword = ({ password, ...rest }) => restconst user = { id: 100, name: 'Howard Moon', password: 'Password!'}noPassword(user) //=> { id: 100, name: 'Howard moon' }


4、动态删除属性

可以利用对象属性名,然后removeProperty传递属性名称将属性删除:


const user1 = { id: 100, name: 'Howard Moon', password: 'Password!'}const removeProperty = prop => ({ [prop]: _, ...rest }) => rest// ---- ------// /// dynamic destructuringconst removePassword = removeProperty('password')const removeId = removeProperty('id')removePassword(user1) //=> { id: 100, name: 'Howard Moon' }removeId(user1) //=> { name: 'Howard Moon', password: 'Password!' }


5、调整对象属性的位置

有时属性不符合我们所需要的顺序。使用一些技巧,我们可以将属性推到列表的顶部,或者将它们移动到底部,例如:

const user3 = { password: 'Password!', name: 'Naboo', id: 300}const organize = object => ({ id: undefined, ...object })// -------------// /// move id to the first propertyorganize(user3)//=> { id: 300, password: 'Password!', name: 'Naboo' }

在这个例子里面将id已到了第一位,下面的例子是将password属性移动到最后一位

const user3 = { password: 'Password!', name: 'Naboo', id: 300}const organize = ({ password, ...object }) => ({ ...object, password })// --------// /// move password to last propertyorganize(user3)//=> { name: 'Naboo', id: 300, password: 'Password!' }


6、默认属性

const user2 = { id: 200, name: 'Vince Noir'}const user4 = { id: 400, name: 'Bollo', quotes: ["I've got a bad feeling about this..."]}const setDefaults = ({ quotes = [], ...object}) => ({ ...object, quotes })setDefaults(user2)//=> { id: 200, name: 'Vince Noir', quotes: [] }setDefaults(user4)//=> {//=> id: 400,//=> name: 'Bollo',//=> quotes: ["I've got a bad feeling about this..."]//=> }

值得注意的是默认属性值仅在未包含在原始对象中时才会设置,从这个例子的结果来看,我们就知道怎样设置默认值了。或者你也可能需要这样写

const setDefaults = ({ ...object}) => ({ quotes: [], ...object })


7、重命名对象的属性

在有些场景,比如我们可能需要修改对象属性的大小写,那么我们可以通过这样的方式来重命名

const renamed = ({ ID, ...object }) => ({ id: ID, ...object })const user = {ID: 500,name: "Bob Fossil"}renamed(user) //=> { id: 500, name: 'Bob Fossil' }//将大写ID改成了小写的


8、条件属性

这个有时候会非常实用,从名字来看,显示是通过条件来控制对象的属性

const user = { id: 100, name: 'Howard Moon' }const password = 'Password!'const userWithPassword = { ...user, id: 100, ...(password && { password })}userWithPassword //=> { id: 100, name: 'Howard Moon', password: 'Password!' }


@CcCc
2楼 · 2020-09-22 00:25

ECMAScript6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。

我们来看看ES6都做了哪些扩展。

Let和const关键字

变量的解构赋值

字符串,数值的扩展

数组,对象的扩展

函数的扩展

for...of

先从let和const这两个关键字看起。

let关键字类似于var,但是他又和var有些不同,主要有两点,

避免了变量提升

只在块级作用域内起作用

来看一段代码

var a = 1;
(function () {
      alert(a);

var a = 2;
})()

这时候弹出的会是undefined,因为在浏览器执行的时候,会有变量提升,也就是会先声明变量a,这段代码实际上是这样的

Var a;

Alert (a);

Var a=2;

而我们使用let关键字,就不会有这个问题,

var a = 1;
(function(){
    alert(a);
    let a = 2;
})();

这个时候浏览器会报错,

因为变量没有提升,所以执行到alert(a)的时候a还是未定义状态,而且因为let只在块级作用域里起作用,所以外部的a也取不到。

然后我们再来看看const。const就是常量的意思,所以他就有了不可更改的属性,尝试给一个常量改变值是会报错的,

const Name='matt';
Name='john';

 

 

const和let一样,只在块级作用域内作用, 不存在变量提升,必须先定义后使用, 不可重复声明, 声明后必须赋值。

const Person={
    'name':'matt'
};
Person.name='john';
Person.age=12;
console.log(Person);

 

这段代码是ok的。怎么const又可以更改了,这就涉及到了传值赋值和传址赋值。你尝试去给Person赋一个新地址会报错的,比如Person={}。但是你只是更改它的属性的话是OK的。

无需指教
3楼 · 2020-09-22 08:28

ECMAScript6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。

我们来看看ES6都做了哪些扩展。

Let和const关键字

变量的解构赋值

字符串,数值的扩展

数组,对象的扩展

函数的扩展

for...of

先从let和const这两个关键字看起。

let关键字类似于var,但是他又和var有些不同,主要有两点,

避免了变量提升

只在块级作用域内起作用

来看一段代码

var a = 1;
(function () {
      alert(a);

var a = 2;
})()

这时候弹出的会是undefined,因为在浏览器执行的时候,会有变量提升,也就是会先声明变量a,这段代码实际上是这样的

Var a;

Alert (a);

Var a=2;

而我们使用let关键字,就不会有这个问题,

var a = 1;
(function(){
    alert(a);
    let a = 2;
})();

这个时候浏览器会报错,

因为变量没有提升,所以执行到alert(a)的时候a还是未定义状态,而且因为let只在块级作用域里起作用,所以外部的a也取不到。

然后我们再来看看const。const就是常量的意思,所以他就有了不可更改的属性,尝试给一个常量改变值是会报错的,

const Name='matt';
Name='john';


 

const和let一样,只在块级作用域内作用, 不存在变量提升,必须先定义后使用, 不可重复声明, 声明后必须赋值。

const Person={
    'name':'matt'
};
Person.name='john';
Person.age=12;
console.log(Person);


这段代码是ok的。怎么const又可以更改了,这就涉及到了传值赋值和传址赋值。你尝试去给Person赋一个新地址会报错的,比如Person={}。但是你只是更改它的属性的话是OK的。

那什么是传址赋值呢?就好比,你预约了一个装修工(张师傅)到你家进行装修,你把你家的地址告诉了他,他顺着地址来到你家,按照你的要求,把你家的门弄成红色。

 仅仅过了两天,你觉得不好看,你又找了另一个装修工(王师傅),你也把地址告诉他,王师傅来到后也是按照你的要求,把门弄成了绿色。


 

 

最后,不管是张师傅还是王师傅,通过这个地址来到你家的时候,看到的门肯定是绿色的,因为最后一次修改是改成绿色。

写成代码就是

 varZhang = {"door":"red"};

   //次日,你把地址也告诉了王师傅
   var Wang Zhang;

   //王师傅按照地址,去到后把门改成绿色
   Wang.door = "green";

   //最后不管是张师傅还是王师傅来到你家,看到门都是绿色的
   console.log(Wang);//结果:输出 {door: "green"}
   console.log(Zhang);//结果:输出 {door: "green"}

这就是传址赋值了。

再来看一个ES6的新特性,for…of。平时我们for循环的时候,是这样写的

Arr=[1,2,3,4,5,6]

for(vari=0;i

有了for…of,我们可以更清晰,牛逼得去遍历数组。

for(let itemof Arr)可以达到和上面代码同样得效果。

  我们列举一下for...of的优势:

写法比for循环简洁很多;

可以用break来终止整个循环,或者continute来跳出当前循环,继续后面的循环;

结合keys( )获取到循环的索引,并且是数字类型,而不是字符串类型。

比如

var arr= [1,2,3,4,5];
   for(let valueof arr){
        if(value ==3){
            //终止整个循环
           break;
        }
        console.log(value);
    }

这样我们就及时得跳出了循环

只会打印出来1和2.

也可以跳过当前循环,把break改成continue就可以了。我们也可以得到数字类型得索引,

 vararr = [1,2,3,4,5];
   for(let indexof arr.keys()){
        console.log(index);
    }

就可以打印出来0,1,2,3,4.

ES6有很多好玩的新属性,我们暂时说这么多。

常见问题:

1.       ES6的兼容问题?

现在浏览器对Es6的兼容已经很好了,但是肯定还有不兼容的浏览器,目前常见的兼容转换工具是Babel。

2. 什么是代码块?

 任何一对花括号(这玩意:{ })中的语句都属于一个块,在花括号里面用let定义的所有变量在花括号外都是不可见的,我们称之为块级作用域。

3.什么是变量提升?

在加载程序之前,浏览器会做一些准备工作,变量、函数表达式——变量声明,默认赋值为undefined;

this——赋值;

函数声明——赋值;

这三种数据的准备情况我们称之为“执行上下文”或者“执行上下文环境”。这就是变量提升


魏魏姐
4楼 · 2020-09-22 09:29

当下ES6有八大最为显著的特性,(在此举出的特性不是说指其他特性不好。)

一、默认参数(Default Parameters)

二、模板文本(Template Literals)

三、多行字符串(Multi-line Strings)

四、解构赋值(Destructuring Assignment)

五、增强的对象文本(Enhanced Object Literals)

六、箭头函数(Arrow Functions)

七、类(Classes)

八、模块(Modules)


茄子酱
5楼 · 2020-09-22 10:34

ECMAScript6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。

我们来看看ES6都做了哪些扩展。

Let和const关键字,变量的解构赋值,字符串,数值的扩展,数组,对象的扩展,函数的扩展,for...of,先从let和const这两个关键字看起。let关键字类似于var,但是他又和var有些不同,主要有两点,避免了变量提升,只在块级作用域内起作用


天天
6楼 · 2021-07-05 16:42

1、常用的es6新特性:let && const;let 命令也用于声明对象,但是作用域为局部;iterable 类型。为了统一集合类型,ES6 标准引入了新的 iterable 类型,Array、Map 和 Set 都属于 iterable 类型,具有 iterable 类型的集合可以通过新的for … of 循环来遍历。

2、es6 比 es5 增加了很多特殊的方法,如果你遇到了这些特殊的方法, 你就可以确定它是 es6。如果你的代码中没有引用这些特殊的方法,那我们就可以认为他是es5 的。所以前提你需要了解 es6 的语法才能做判断,高频使用的特性有箭头函数、解构赋值、let、const。

3、es5 的继承是通过原型或者是构造函数机制来实现,es6 用过 class 关键字定义类,里面有构造方法,类之间通过 extends 关键字实现,子类必须在 constructor 方法中调用 super 方法。


水默
7楼 · 2021-07-06 13:45

  1. const 与 let 变量

  let与const声明的变量解决了这种问题,因为他们是块级作用域, 在代码块(用{}表示)中使用let或const声明变量, 该变量会陷入暂时性死区直到该变量的声明被处理。

  关于使用let与const规则:

  使用let声明的变量:可以重新赋值,但是不能在同一作用域内重新声明

  使用const声明的变量:必须赋值初始化,但是不能在同一作用域类重新声明也无法重新赋值.

  2. 模板字符串

  可以使用反引号(``),键盘数字1左面的那个键。来定义一个字符串模板,在其中可以使用${}来存放一个变量或者表达式。

  3. 字符串新增的一些方法

  {

  let str = 'imshusheng.com';

  // 查看字符串中是否包含某些字符

  console.log(str.includes('.'));

  console.log(str.includes('shu'));

  //查看字符串是否以某个字符串开头

  console.log(str.startsWith('i'));

  console.log(str.startsWith('im'));

  //查看字符串是否以某个字符串结尾

  console.log(str.endsWith('com'));

  console.log(str.endsWith('m'));

  //字符串重复3遍

  console.log(str.repeat(3))

  //如果字符串的长度不满20位,则在其后面补字符s

  console.log(str.padEnd(20, 's'));

  //如果字符串的长度不满20位,则在其前面补字符s

  console.log(str.padStart(20, 's'));

  }

  4. 函数

  4.1 默认参数

  之前的js中, 我们是无法像python、php等语言一样给函数的形参指定默认参数的,我们一般这样解决问题。

  function xxx(a, b) {

  b = b || 100;

  console.log(a);

  console.log(b);

  }

  xxx(1)

  在ES6中,我们可以这样做了:

  function xxx(a, b = 100) {

  console.log(a);

  console.log(b);

  }

  xxx(1)


相关问题推荐

  • 回答 97
    已采纳

    Js给初学者的印象总是那么的杂而乱,相信很多初学者都在找轻松学习Js的途径。在这里给大家总结一些学习Js的经验,希望能给后来的学习者探索出一条轻松学习Js之路。Js给人那种感觉的原因多半是因为它如下的特点:A:本身知识很抽象、晦涩难懂,如:闭包、内置...

  • 回答 4

    看图:

  • 回答 18

    基本类型( 6种 ):Number ( 数值 ) String ( 字符串 )Boolean ( 布尔 ) Undefined ( 未定义 )Null ( 空 )ES6 - Symbol  ( 唯一 )

  • 回答 19

    JavaScript 使网页增加互动性,使有规律地重复的HTML文段简化,减少下载时间。JavaScript 能及时响应用户的操作,对提交表单做即时的检查,无需浪费时间交由 CGI 验证。JavaScript 的特点是无穷无尽的,只要你有创意。...

  • 回答 18

    timeoutId: 定时器IDfunc: 延迟后执行的函数code: 延迟后执行的代码字符串,不推荐使用原理类似eval()delay: 延迟的时间(单位:毫秒),默认值为0param1,param2: 向延迟函数传递而外的参数,IE9以上支持setInterval: 以固定的时间间隔重复调用一个函...

  • 回答 15

    Number类型String类型Boolean类型Undefined类型Null类型

  • 回答 14

    空格在ASCII中的值为32,空字符为0,可本人觉得不就是都是为空的吗,没有什么区别?char mychar1,mychar2;mychar1=' ';mychar2='\0';printf(mychar1=%d,mychar2=%d,mychar1,mychar2);//其中mychar1=32;mychar2=0;...

  • 回答 16

    1.变量名可以有数字0~9、大小写字母、下划线、美元符$组成。2.变量名不能以数字开头。 当我们以数字为开头时,代码就会出现橙色下划线,代表命名不...3.变量名不允许使用中文。 不能允许使用中文这个就不用多说了吧,不管你在哪找代码来看,代码中...4.区分大小写...

  • 回答 8

    向一个对象数组里面添加新的属性var arry= [{a:11,b:22,c:33,d:44},{a:11,b:0,c:0,d:44},{a:11,b:22,c:99,d:99}];var arry2=[];arry.map(((item, index)=> {arry2.push(Object.assign({},item,{mess1:item.c,mess2:item.d}))}))cons...

  • 回答 2

    我觉得getTopWindow() 应该是他自己写的函数 mask  应该是getTopWindow()函数中 return 出的一个什么玩意show()  jQuery的显示

  • 回答 16

    看上图

  • 回答 9

    如图所示

  • 回答 12

    1、原型对象也是普通的对象,是对象一个自带隐式的 __proto__ 属性,原型也有可能有自己的原型,如果一个原型对象的原型不为 null 的话,我们就称之为原型链 2、 原型链是由一些用来继承和共享属性的对象组成的(有限的)对象链...

  • js选项卡的实现原理2021-06-15 21:48
    回答 6

    如图所示,最简单的选项卡思路:选项卡就是点击按钮切换到相应内容,其实就是点击按钮把内容通过display(block none)来实现切换的。1、首先获取元素。2、for循环历遍按钮元素添加onclick 或者 onmousemove事件。3、因为点击当前按钮时会以高亮状态显示,所以...

  • 回答 4

    1、js截取两个字符串之间的内容:123var str = aaabbbcccdddeeefff; str = str.match(/aaa(\S*)fff/)[1]; alert(str);//结果bbbcccdddeee2、js截取某个字符串前面的内容:123var str = aaabbbcccdddeeefff; tr = str.match(/(\S*)fff/)[1];......

  • 回答 4

    如果是ajax 就直接获取如果是传到一个页面 就再get再在js中使用 就可以获取了。 可以在js中获取一个变量 但是不能写入一段java代码.

没有解决我的问题,去提问