在JavaScript中0 === 4是什么意思?

时间:2014-09-01 15:48:29

标签: javascript

我看到了以下JavaScript代码并且它让我感到困惑,因为逻辑0永远不会是4或5:

 if (0 === 4) { // Safari
      safari.self.addEventListener("message", safariMessageListener, false);
 } else if (0 === 5) { // Opera
      opera.extension.onmessage = operaMessageListener;
 }

我将假设此代码有效。那么程序员是否设法以某种方式重新定义0或者0不知何故不是指数字0?任何人都可以解释这个代码,为什么有人这样编码?这种技术的优点是什么? (除了让像我这样迷惑的人!)

为了完整起见,此片段来自YouTube Center Grease Monkey插件。其URL为:

https://github.com/YePpHa/YouTubeCenter/wiki/Developer-Version

完整的方法是:

  function initListeners() {
    if (support.CustomEvent) {
      window.addEventListener("ytc-content-call", eventListener, false);
    } else {
      window.addEventListener("message", messageListener, false);
    }

    window.addEventListener("unload", windowUnload, false);

    if (0 === 4) { // Safari
      safari.self.addEventListener("message", safariMessageListener, false);
    } else if (0 === 5) { // Opera
      opera.extension.onmessage = operaMessageListener;
    }
  }

1 个答案:

答案 0 :(得分:9)

source code看起来很不一样:

if (@identifier@ === 4) { // Safari
  safari.self.addEventListener("message", safariMessageListener, false);
} else if (@identifier@ === 5) { // Opera
  opera.extension.onmessage = operaMessageListener;
}

只有一个Ant build script会将@identifier@替换为${indentifier.userscript}

<target name="copy-userscript-meta">
  <copy todir="${buildDir}">
    <fileset dir="${src.meta}/" />
  </copy>
  <antcall target="tokenreplace" />
  <replace dir="${buildDir}" value="${indentifier.userscript}" token="@identifier@" encoding="${encoding}" />
</target>

${indentifier.userscript}在同一个文件中定义。