Cos*_*sta 1 ejs node.js express
我正在创建一个简单的网站,其中nodejs使用快速框架,couchdb用于数据库,EJS用于模板化.有些时候我的某些JSON文档中的某些字段为null或未定义,我需要处理它.
<% if (typeof test !== 'undefined') { %>
<p><%= test %></p>
<% } %>
Run Code Online (Sandbox Code Playgroud)
这段代码似乎处理'测试'字段未定义就好了,但下面的代码抛出一个错误,上面写着'测试未定义'
<% if (test) { %>
<p><%= test %></p>
<% } %>
Run Code Online (Sandbox Code Playgroud)
为什么javascript不能理解test是未定义的,然后在if子句中放入false?
因为"undefined"的概念不同于JavaScript语言中定义的变量的状态.其原因是可以理解的,但效果可能会令人困惑,特别是关于变量名称和对象属性.
您已经演示了如何尝试访问未定义的变量将引发异常.不要将此状态(未定义变量)与"未定义"类型混淆:
if (bogusVariable) { // throws ReferenceError: bogusVariable is not defined.
typeof(bogusVariable); // => undefined - wow, that's confusing.
Run Code Online (Sandbox Code Playgroud)
但是,可以安全地测试未定义的对象的属性:
var x = {}; // an object
x.foo; // => undefined - since "x" has no property "foo".
typeof(x.foo); // => undefined
if (!x.foo) { /* true */ }
Run Code Online (Sandbox Code Playgroud)
您可以通过注意所有变量实际上是"全局"对象(在Web浏览器中为"全局"或"窗口")的属性来利用此属性.
bogus; // => ReferenceError: bogus is not defined.
global.bogus; // => undefined (on node/rhino)
window.bogus; // => undefined (on web browsers)
Run Code Online (Sandbox Code Playgroud)
所以你可以这样编写你的EJS代码:
<% if (global.test) { %>
<p><%= test %></p>
<% } %>
Run Code Online (Sandbox Code Playgroud)
是的,它与JavaScript语言的许多部分一样令人困惑.
| 归档时间: |
|
| 查看次数: |
6417 次 |
| 最近记录: |