为何ES6严格模式下执行`"foo".bar = 42;`会抛出TypeError?
严格模式下字符串字面量赋值属性的行为差异
在ES5.1规范的定义里,执行代码"use strict"; "foo".bar = 42;时,会先创建一个临时的String对象,给它的bar属性赋值为42后就直接丢弃这个对象了——整个过程不会产生任何可观察的效果,连异常都不会抛出。你可以在Opera 12这类严格兼容ES5的JS环境中验证这个特性,实际运行后会发现确实没有任何反应。
而在现代JS实现中,这段代码的行为发生了变化:运行"use strict"; "foo".bar = 42;会直接抛出TypeError异常,你随便找个主流浏览器或者Node.js环境跑一遍就能看到这个结果。我对这个新行为的细节是十分确定的。
内容的提问来源于stack exchange,提问作者cpcallen
相关产品推荐
相关产品推荐

