由於「未定義」的概念是比在JavaScript語言中定義的變量存在的狀態不同。原因是可以理解的,但效果可能會令人困惑,特別是在變量名稱與對象屬性方面。
您已經演示瞭如何試圖訪問未定義的變量將引發異常。不要用「未定義」類型混淆狀態(沒有定義的變量):
if (bogusVariable) { // throws ReferenceError: bogusVariable is not defined.
typeof(bogusVariable); // => undefined - wow, that's confusing.
然而,這是沒有定義對象的屬性可以被安全地測試:
var x = {}; // an object
x.foo; // => undefined - since "x" has no property "foo".
typeof(x.foo); // => undefined
if (!x.foo) { /* true */ }
你可以請注意,所有變量實際上都是「全局」對象(在Web瀏覽器中爲「全局」或「窗口」)的屬性。
bogus; // => ReferenceError: bogus is not defined.
global.bogus; // => undefined (on node/rhino)
window.bogus; // => undefined (on web browsers)
那麼你也許可以寫你的代碼EJS這樣:
<% if (global.test) { %>
<p><%= test %></p>
<% } %>
是的,這是令人困惑,因爲是JavaScript語言的許多部分。
...因爲它的不確定不假?我個人很高興它不喜歡「哦,嘿,兄弟,你必須意味着這未定義爲假」 – Loktar