跨浏览器有效的JavaScript名称

时间:2012-06-07 12:30:43

标签: javascript variables

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:2)

  

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

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

  

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

保留字只能由具有保留字概念的标准定义,与具有该概念的浏览器中的脚本DOM相关的唯一标准是ECMA-262。并且它不会将 print 列为保留字,因此它不是一个。

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

  

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

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

e.g。 窗口对象的以下链接:

  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
  4. 此外,有一个简单的for..in循环(根据Berji的答案)在特定时间发现可枚举属性,但是这可能不是所有可能属性名称的综合列表,并且将包括用户定义的属性默认浏览器属性没有区别。

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

答案 1 :(得分:1)

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

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

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

然而,它将依赖浏览器,因为有些人没有实现使用Window接口的所有酷HTML5草案内容;例如你不会在IE9中找到"Worker",在FF中找不到"openDatabase",依此类推。此外,它可能不会列出"onload"等遗留属性,尽管您可以为其获取属性描述符(以及"onload" in window === true)。