【问题标题】:What is the `name` keyword in JavaScript?JavaScript 中的 `name` 关键字是什么?
【发布时间】:2011-02-09 11:04:42
【问题描述】:

当我输入这段看似无辜的 sn-p 代码时:

values.name

gedit 将 name 突出显示为关键字。但是,an answer to a question about reserved keywords 链接的页面并未列出 name。我还在 SpiderMonkey 中做了一些简单的测试,但 name 似乎表现得像一个普通的标识符。

Google 搜索也没有告诉我太多信息。但是,我确实找到了 a page listing name in "Other JavaScript Keywords". 我的猜测是 name 是某个 DOM 元素的函数或成员,并且不会侵入命名空间。

name 真的是 JavaScript 中的关键字吗?如果是这样,它有什么作用?

【问题讨论】:

  • name 被(曾经)用作a 元素的属性,因此它可能出现在 DOM 代码中。也许这就是您的编辑突出显示它的原因。
  • 实际上 gedit 将name 突出显示为一个属性。但在经典配色方案中,属性和关键字都使用相同的样式定义。因为 gedit 的解析能力非常有限,尽管只有一小部分重要的属性名称会用这种样式突出显示,例如像 globalsourcelastIndex 这样的正则表达式属性和像 prototype、@987654331 这样的函数属性@ 和 name.
  • 在 chrome 中,名称的行为很奇怪,就像来自本地主机的全局对象。即在函数内 var name ='...' 正在修改原始 window.name ,因此 'name;在 fn 范围之外可用。但是,当我在控制台和 Plunkr 中单独运行它时,它显示未定义/或原始窗口对象。在 IE 中它的行为正常(即在 localhost 中未定义/为空)

标签: javascript keyword


【解决方案1】:

它不是 javascript 保留字,它是一个 html 属性。任何 DOM 元素都可以有名称。看起来您的语法编辑器仍会突出显示它。

【讨论】:

【解决方案2】:

(我知道这是 2 年前问过的,但是,...) 这也发生在我身上,例如下面的这个不起作用。

name = document.getElementById('nombre');
//something else
name.className = 'thinking';

相反,我将其更改为

username = document.getElementById('nombre');
//something else
username.className = 'thinking';

它确实奏效了! 是的,好吧,这就是全部,但我觉得这可能很有趣,也是因为'a'标签的'name'属性。需要注意的地方。

【讨论】:

  • 问题不在于重用全局 name 变量的问题。与在全局范围内使用普通的 name 相比,values.name 的使用 确实 起作用,它只是在文本编辑器中显示异常。
  • window.name 有一个设置器,可以在存储之前对值进行字符串化。只需在非全局范围内使用 var 声明它。
【解决方案3】:

什么?
'name' 是浏览器窗口对象的属性。它是 JavaScript 中的内置属性。
访问:https://developer.mozilla.org/en-US/docs/Web/API/Window/name

为什么要@deprecated
window.name 仍在 JavaScript 中使用,但计划在未来移除。
访问:The Difference Between Deprecated, Depreciated and Obsolete

【讨论】:

    【解决方案4】:

    它不是保留字,它是一个变量(它是 window.name)我不确定它是由什么定义的。

    【讨论】:

    • 上述文本编辑器并没有突出显示name。它仅在用作属性名称时突出显示它,例如window.name。然后只有.name 部分被突出显示。
    【解决方案5】:

    这也发生在我身上,例如,在我测试调用、绑定函数时,以下内容对我不起作用。

    var name={
    firstname: 'Abhishek',
    lastname: 'Agarwal',
    
    fullname: function{
        var fname = this.firstname + ' ' + this.lastname;
        return fname;
    }
    
    function printname(){
        console.log(this.fullname());
    }
    var final=printname.bind(name);
    final();
    

    这实际上并没有执行任务,而是当我用“myname”或其他任何内容替换“name”出现时,它确实有效!

    【讨论】:

    【解决方案6】:

    对我来说也很奇怪,当我学习 JavaScript 中的调用、应用和绑定时,下面的代码对我不起作用。我头疼了半个小时,直到我发现我没有做任何逻辑错误,但问题在于变量名。

    var name = {firstName: 'sarwan',lastName :'kumar'};

    function say(){ console.log('' + this.firstName + ' ' + this.lastName); }

    say.call(name);

    这给了我结果

    “未定义未定义”

    而且我就像字面意思一样,怀疑这不是通过说函数传递给我的,尝试更改除 name 变量之外的其他代码部分,但仍然对我不起作用。但后来不知怎么想通了,代价是破坏了我好半个小时的心情。

    【讨论】:

      【解决方案7】:

      在启用 Eslint 的同时使用 Visual Studio 代码编辑器,您可以看到“名称”被归类为“@deprecated”。尽管 Google 不清楚“name”是否是保留关键字,但“@deprecated”标签暗示相关功能是正确的,可能是为了支持向后兼容性……等等,目前该功能有被拒绝,鼓励避免。

      【讨论】:

        猜你喜欢
        • 2017-05-07
        • 2011-01-17
        • 2010-12-11
        • 2011-10-07
        • 2010-10-08
        • 2011-09-04
        相关资源
        最近更新 更多