2014-09-01 162 views
4

我看到了下面的JavaScript代碼,它讓我感到困惑,因爲從邏輯0將永遠4或5:在JavaScript中,0 === 4是什麼意思?

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

我會認爲這個代碼的工作。那麼程序員是否設法以某種方式重新定義0,或者0不知道如何指向數字0?任何人都可以解釋這個代碼,爲什麼會有人這樣的代碼?這種技術的優點是什麼? (除了令人困惑的人喜歡我!)

爲了完整起見,此片段來自YouTube中心Grease Monkey插件。它的網址是:

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

https://github.com/YePpHa/YouTubeCenter/blob/85a3ff38dc7523757ee449903026ec270d8fb387/experiments/inject-everything.js#L467-471 – Bergi 2014-09-01 15:57:31

回答

9

source code看起來相當不同:

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

只是有一個Ant build script它取代這個@[email protected]${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="@[email protected]" encoding="${encoding}" /> 
</target> 

${indentifier.userscript}定義在同一個文件中。

+0

謝謝!我以爲我瘋了 - 並認爲我有另一個理由恨JavaScript :) – Phil 2014-09-01 16:18:03

+0

@Pil保持冷靜,閱讀來源。 ;-) – hsz 2014-09-01 16:29:06