为何eval('let = new Array')可正常运行?预期报错却未报错
问题解答
核心原因是浏览器版本对ES6关键字
let的处理差异:- 在ES6(ECMAScript 2015)正式规范中,
let被定为声明变量的关键字,不能作为普通变量名使用,因此let = new Array属于语法错误,现代主流浏览器(Chrome 49+、Firefox 44+)执行这段代码都会抛出SyntaxError。 - 如果你使用的是较旧版本的Chrome/Firefox(比如Chrome 48及以前、Firefox 43及以前),当时
let还处于实验性支持阶段,并未被完全列为保留关键字,此时let可以被当作普通变量名使用,let = new Array会被解析为给变量let赋值,因此不会报错,能正常运行。
- 在ES6(ECMAScript 2015)正式规范中,
另外需要确认是否存在输入错误:比如你实际运行的代码是
let arr = new Array()(带变量名的合法声明),而非let = new Array,这种情况下代码本身合法自然不会报错。
内容的提问来源于stack exchange,提问作者i am super noob
相关产品推荐
相关产品推荐

