我有以下代码,以前在Chrome中运行良好,但突然停止使用最新版本(38.0.2125.104)。
(function() {
"use strict";
var stringPrototype = String.prototype;
stringPrototype.foo = function() { this.$foo = 1234; };
var s = "abcd";
s.foo();
})();

现在我收到错误(如果您运行代码段,您将在控制台中看到错误):
未捕获的TypeError:无法分配给只读属性' $ foo' abcd
我很想知道这是Chrome中的新错误,还是我一直在做的事实上是非法的。如果它是非法的,是否有任何参考规范可以描述为什么会这样?
以前版本的Chrome从未导致错误。
答案 0 :(得分:1)
上面的评论帮助我解决了我的问题。总结一下,我正在做的任务:
this.$foo = 1234
从未做任何事情。在较新版本的Chrome中,这种虚假分配实际上会导致错误。这似乎是一种改进,因为它会更快地导致失败并且应该更早地发现潜在的错误。
因此,尽管我认为较新版本的Chrome在以前正在运行的代码中导致错误,但由于我的代码从未执行任何操作,因此我可以安全地删除该分配,因为行为必须完全相同。 / p>
(将此作为社区维基回答,因为Pointy和Derek完成了所有繁重的工作。)