1

在您使用“RTFM”或我访问过的一堆链接快速发布之前,我完全了解不使用的记录保留变量名称。

我能找到的最好的清单在这里:

http://es5.github.com/x7.html#x7.6.1.1http://www.javascripter.net/faq/reserved.htm

我要的是仅在 1 个或 2 个浏览器上无效的变量名称。

例如,我可以定义print,但这会导致错误,因为 print 已在全局范围上定义window。为什么不将此记录为保留关键字?

是否有一大堆要避免的变量名?

4

2 回答 2

2

我要的是仅在 1 个或 2 个浏览器上无效的变量名称。

如果存在任何此类词,则该浏览器将不符合 ECMA-262。只有 ECMA-262 中的保留字是“无效的变量名”(前提是该名称符合变量名的标准,例如允许的字符)。

为什么不将 [print] 记录为保留关键字?

保留字只能由具有保留字概念的标准定义,唯一与在具有该概念的浏览器中编写 DOM 脚本相关的标准是 ECMA-262。而且它没有将print列为保留字,所以它不是一个。

有各种定义宿主对象及其属性的 DOM 标准,它们可能与保留字概念最接近的是只读属性或不可写属性。window.print在 HTML5 中定义,它没有将它定义为不可写,或者如果分配给它或尝试修改它,它应该抛出错误。所以它没有表现出任何接近保留字的行为。

是否有一大堆要避免的变量名?

不,因为没有。但是,宿主对象(如window)具有可写的默认属性,您应该避免覆盖它们。它们应该列在不同的地方,例如 HTML5 规范和浏览器供应商文档。

例如以下窗口对象的链接:

  1. W3C HTML5 窗口对象:http ://www.w3.org/TR/html5/browsers.html#the-window-object
  2. MDN 窗口对象:https ://developer.mozilla.org/en/DOM/window
  3. MSDN 窗口对象: http: //msdn.microsoft.com/en-us/library/ms535873 (v=vs.85).aspx

此外,还有一个简单的 for..in 循环(根据 Berji 的回答)来发现特定时间的可枚举属性,但这可能不是所有可能属性名称的完整列表,并且将包括用户定义的属性以及默认浏览器属性无区别。

采用避免可能的属性名称并尽量减少使用全局变量(即窗口对象的用户定义属性)的命名约定是一种更好的策略。

于 2012-06-07T12:43:02.687 回答
1

如果您想要一个浏览器定义的变量的大列表来扩展保留关键字的官方列表,请在空白页面(about:blank)上在控制台中键入以下内容:

>>> Object.getOwnPropertyNames(window)
>>> Object.getOwnPropertyNames(Object.getPrototypeOf(window)) // sometimes not Object

这将产生一个你绝对不应该使用的字符串数组。它也包括"print"

然而它将依赖于浏览器,因为有些没有实现使用该Window界面的所有很酷的 HTML5 起草的东西;例如,你不会"Worker"在 IE9、"openDatabase"FF 等中找到。此外,它可能不会列出遗留属性,例如"onload",尽管您将能够获得它的属性描述符(和"onload" in window === true)。

于 2012-06-07T23:57:23.223 回答