在您使用“RTFM”或我访问过的一堆链接快速发布之前,我完全知道不使用已记录的保留变量名称。
我能找到的最佳列表在这里:
http://es5.github.com/x7.html#x7.6.1.1 和 http://www.javascripter.net/faq/reserved.htm
我要的是仅在 1 或 2 个浏览器上无效的变量名称。
例如,我可以定义 print
,但这会导致错误,因为 print 已经在全局范围 window
中定义。为什么不将其记录为保留关键字?
是否有大量变量名需要避免?
最佳答案
What I am asking for are the variable names that are invalid on 1 or 2 browsers only.
如果存在任何此类词语,则该浏览器将不符合 ECMA-262。只有 ECMA-262 中的保留字是“无效的变量名称”(前提是该名称在其他方面符合变量名称的标准,例如允许的字符)。
Why isn't [print] documented as a reserve keyword?
保留字只能由具有保留字概念的标准定义,唯一与在具有该概念的浏览器中编写 DOM 脚本相关的标准是 ECMA-262。而且它没有将 print 列为保留字,所以它不是保留字。
有多种定义宿主对象及其属性的 DOM 标准,它们可能最接近保留字概念的是只读属性或不可写属性。 window.print
是在 HTML5 中定义的,它没有将其定义为不可写,或者如果分配给它或尝试修改它应该抛出错误。因此它不会表现出任何接近保留字的行为。
Is there a big list of variable names to avoid?
没有,因为没有。但是,宿主对象(如 window)具有可写的默认属性,您应该避免覆盖它们。它们应该列在不同的地方,例如 HTML5 规范和浏览器 vendor 文档。
例如window 对象的以下链接:
- W3C HTML5 窗口对象:http://www.w3.org/TR/html5/browsers.html#the-window-object
- MDN 窗口对象:https://developer.mozilla.org/en/DOM/window
- MSDN 窗口对象:http://msdn.microsoft.com/en-us/library/ms535873(v=vs.85).aspx
此外,还有一个简单的 for..in 循环(根据 Berji 的回答)来发现特定时间的可枚举属性,但是这可能不是所有可能属性名称的完整列表,并且将包括用户定义的属性与默认浏览器属性没有区别。
采用避免可能的属性名称并尽量减少全局变量(即窗口对象的用户定义属性)的使用的命名约定是更好的策略。
关于javascript - 跨浏览器有效的 JavaScript 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10931833/