【问题标题】:Socket.io using the name "in" makes Webstorm IDE raise error使用名称“in”的 Socket.io 使 Webstorm IDE 引发错误
【发布时间】:2012-01-28 00:52:40
【问题描述】:

我使用的是 socket.io 8.7。我使用 Webstorm 作为 IDE 来编写我的网络应用程序。

当我写这个时,Webstorm 显示一个错误:

io.sockets.in("some room id").emit(...)

Webstorm 用红色在in 下划线,并说“预期名称”。 Webstorm 中的结果将包含此代码行的整个 JavaScript 文件显示为损坏的代码文件。

有谁知道如何告诉 Webstorm 忽略这个错误?这很烦人,因为它涵盖了真正的错误消息。

欢迎提出任何建议。

【问题讨论】:

    标签: javascript socket.io webstorm


    【解决方案1】:

    向他们的tracker发送错误报告

    编辑:不,这不是 socket.io 的错误。在 JavaScript 中使用保留字作为对象键没有任何问题 - 保留字仅保留为 标识符(变量/函数名称),而不是其他任何地方。这是 WebStorm IDE 的一个错误,可能是因为在其他语言中根本不允许保留字是很常见的(实际上没有理由这样做)。

    参考资料:

    【讨论】:

    • 我认为更好的解决方案是将报告发送给 socket.io 创建者:)
    • 如果您在 Internet Explorer 8 或更早版本中尝试,您会看到它被视为错误。
    • ...也就是说,Internet Explorer 8 或更早版本是否与 socket.io 相关是一个公平的观点 :-) 然而,IDE 可能不(并且真的不能)知道是否某些代码可能旨在支持 Internet Explorer,当然这是一个很好的猜测。
    • socket.io 确实有旧版浏览器的后备,因此它与 IE 相关。但是,我希望 IDE 能够根据语言规范工作,而不是根据奇怪的浏览器怪癖。
    【解决方案2】:

    这是因为“in”是 JavaScript 中的保留字。这是一个运算符:

    if ("someString" in someObject) {
      // someObject has a property called "someString"
    }
    

    换句话说,一个“真正的错误”。现在,如果你真的想要一个名为“in”的属性/方法,你可以这样做:

    io.sockets['in']("some room id").emit(...)
    

    【讨论】:

    • 我猜 io.sockets['in']... 现在可以了。然后 Webstorm 不会抱怨,我仍然可以使用 socket.io 中的功能。如果socket.io一开始不依赖保留字,那就太好了,但是感谢您的解决方案!
    猜你喜欢
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    相关资源
    最近更新 更多