在将来的ECMAScript版本中是否有可能对此行为进行更改?
我会说机会很小。有以下几个原因:
我们已经知道ES5和ES6的样子
将来的ES版本已经完成或正在草拟中。afaik都无法改变这种行为。而且要记住的是,要在浏览器中建立这些标准将花费数年的时间,因为您可以使用这些标准编写应用程序而无需依赖将其编译为实际Javascript的代理工具。
只是尝试估计持续时间。大多数浏览器甚至都没有完全支持ES5,这可能还需要几年时间。ES6尚未完全指定。出乎意料的是,我们至少要再等五年。
浏览器做自己的事
众所周知,浏览器会在某些主题上做出自己的决定。您不知道所有浏览器是否都以完全相同的方式完全支持此功能。当然,一旦它成为标准的一部分,您就会知道,但是到目前为止,即使它宣布成为ES7的一部分,充其量也只是猜测。
浏览器可能在这里做出自己的决定,尤其是因为:
这种变化正在打破
关于标准的最大的事情之一就是它们通常试图向后兼容。对于必须在各种环境中运行相同代码的Web来说尤其如此。
如果该标准引入了一项新功能,而旧的浏览器不支持该功能,那是一回事。告诉您的客户更新其浏览器以使用该网站。但是,如果您更新浏览器,突然间一半的互联网中断了,那是个不对的错误。
当然,此特定更改不太可能破坏很多脚本。但这通常是一个糟糕的论点,因为标准是通用的,必须考虑所有机会。考虑一下
"use strict";
作为切换到严格模式的说明。它显示了标准为使所有内容兼容而付出的巨大努力,因为他们可以将严格模式设置为默认模式(甚至只有默认模式)。但是通过此巧妙的指令,您可以不更改而允许旧代码运行,并且仍然可以利用新的更严格的模式。
向后兼容的另一个示例:===
运算符。==
从根本上来说是有缺陷的(尽管有些人不同意),它可能只是改变了它的含义。而是===
引入了它,使旧代码仍然可以运行而不会中断;同时允许使用更严格的检查来编写新程序。
对于破坏兼容性的标准,必须有一个很好的理由。这带给我们
只是没有充分的理由
是的,它使您烦恼。这是可以理解的。但是归根结底,没有什么不是很容易解决的。使用||
,编写函数-随便什么。您几乎可以免费使用它。那么,投入全部时间和精力来分析这种我们知道正在打破的变化的真正好处是什么?我只是不明白要点。
Javascript在设计上有几个弱点。随着语言变得越来越重要和强大,它已经成为一个更大的问题。但是,尽管有很好的理由来更改其许多设计,但是其他事情并没有意味着要更改。
免责声明:此答案部分基于意见。
R
背景,您会明白您的意思paste0("a", NULL) == "a"