当前位置: 首页 > 面试题库 >

ECMAScript 2015(ES6)和'let'和'const'有什么区别?

乜嘉悦
2023-03-14
问题内容

我不知道是什么样的区别let,并constES6 。两者都是块作用域的,如以下代码中的示例所示:

const PI = 3.14;
console.log(PI);

PI = 3;
console.log(PI);

const PI = 4;
console.log(PI);

var PI = 5;
console.log(PI);

在ES5中,输出为:

3.14
3.14
3.14
3.14

但是在ES6中它将是:

3.14
3
4
5

我想知道为什么 ES6 允许更改const值,问题是为什么我们现在应该使用’const’?我们可以用“ let”代替吗?

注意 :jsbin可以用于测试,选择 JavaScript 运行
ES5 代码,并选择 Traceur 使用 ES6 功能运行它。


问题答案:

let和之间的区别const是,一旦您使用将键值/对象绑定到变​​量const,便无法将其重新分配给该变量。换句话说:

const something = {};
something = 10; // Error.

let somethingElse = {};
somethingElse = 1000; // This is fine.

问题细节声称这是对ES5的更改-这实际上是一种误解。const在仅支持ECMAScript 5的浏览器中使用将始终引发错误。该const语句在ECMAScript 5中不存在。其行为是JS Bin对正在运行的JavaScript类型产生误导,或者是浏览器错误。

在实践中,浏览器并不仅仅是一次从0%对ECMAScript 2015(ECMAScript 6)的支持变为一次100%的支持-功能逐点添加,直到浏览器完全兼容为止。JS Bin所谓的“ JavaScript”仅表示您的浏览器当前支持的任何ECMAScript功能-并不表示“ ES5”或“ ES6”或其他任何形式。许多浏览器都支持const和let他们完全支持ES6前,但有些(如Firefox)对待const像let一段时间。这可能是问题的提问者的浏览器支持let,并const却没有正确地实现它们。

其次,Babel和Traceur之类的工具无法使ES6在较旧的浏览器中“运行”,而是将ES6代码转换为能完成大致相同功能的ES5。Traceur可能会将const语句转换为var语句,但是我怀疑它总是强制将const语句的语义完全复制到ES5中。使用JS Bin使用Traceur运行ES6不会获得与在完全符合ES6规范的浏览器中运行ES6完全相同的结果。

重要的是要注意const不要使值或对象不可变。

const myArray = [];
myArray.push(1); // Works fine.
myArray[1] = 2; // Also works fine.
console.log(myArray); // [1, 2]
myArray = [1, 2, 3] // This will throw.

目前使对象(浅)不变的最好方法是Object.freeze()在其上使用。但是,这只会使对象本身成为只读对象。对象属性的值仍然可以更改。



 类似资料:
  • 本文向大家介绍说下var、let和const有什么区别?相关面试题,主要包含被问及说下var、let和const有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 var定义变量,let定义常量,const定义变量。 var存在变量提升,let和const不存在变量提升 let,const部分说反了吧...

  • 本文向大家介绍let和const的区别是什么相关面试题,主要包含被问及let和const的区别是什么时的应答技巧和注意事项,需要的朋友参考一下 let和const都是es6引入的新的关键字,let主要解决的是var变量提升导致的全局变量污染问题,let是块级作用域,var是函数作用域,const和let功能一样只是多了一个不可更改的修饰,项目中我们应该多使用const,避免使用var。

  • 问题内容: 在学习电子时,我发现了两种获取BrowserWindow对象的方法。 和 和之间有什么区别? 我不明白为什么可以使用。我是否想念有关JS的重要信息? 问题答案: 这两段代码是等效的,但是第一段代码使用的ES6分解分配要短一些。 这是一个如何工作的简单示例:

  • 本文向大家介绍ES6中let 和 const 的新特性,包括了ES6中let 和 const 的新特性的使用技巧和注意事项,需要的朋友参考一下 在javascript中,我们都知道使用var来声明变量。javascript是函数级作用域,函数内可以访问函数外的变量,函数外不能访问函数内的变量。本文给大家介绍ES6中let 和 const 的特性,具体内容如下所示: let的特性: 1.不存在变量提

  • 我最近读到了关键字,我很困惑!我找不到和关键字之间的任何区别,我的意思是我们可以使用它们来创建一个不可变的变量,还有什么我遗漏的吗?

  • 和之间有什么区别? 什么时候我只能使用其中一个