Javascript Console.log正在打印,而<;%=不是

Javascript Console.log正在打印,而<;%=不是,javascript,ejs,Javascript,Ejs,我有这个代码问题是有的行没有打印任何东西,而如果我用控制台.log(propofp)替换它,它会工作 <% for (var x in data){ %> <% if(data.hasOwnProperty(x)){ %> <% var obj = data[x]; %> <% for( var prop in obj){ %> <% if(obj

我有这个代码问题是有的行没有打印任何东西,而如果我用控制台.log(propofp)替换它,它会工作

<%  for (var x in data){ %>
    <%  if(data.hasOwnProperty(x)){ %>
    <%  var obj = data[x]; %>
    <%  for( var prop in obj){ %>                           
    <%  if(obj.hasOwnProperty(prop)){ %>
    <%  if(isNaN(prop)){ %>                                             
    <%  findName([prop],function(err,data){ %>
    <%  for(var h in data[0]) {%>       
    <%  var obj2 = data[0][h];  %>      
    <%  for (propOfProp in obj2) { %>
    <%  if(isNaN(propOfProp)){ %>   
    <%= propOfProp%>
    <% } }%>
    <% } %>
    <%  }); %>

    <%  } %>
    <%  } %>
    <%  } %>
    <%  } } %>

在ejs中的意思是对其进行插值和转义(请参阅),而不仅仅是打印js变量,您可能需要这样做(请参阅)

因此,解决办法是

<%  for (var x in data){ %>
    <%  if(data.hasOwnProperty(x)){ %>
    <%  var obj = data[x]; %>
    <%  for( var prop in obj){ %>                           
    <%  if(obj.hasOwnProperty(prop)){ %>
    <%  if(isNaN(prop)){ %>                                             
    <%  findName([prop],function(err,data){ %>
    <%  for(var h in data[0]) {%>       
    <%  var obj2 = data[0][h];  %>      
    <%  for (propOfProp in obj2) { %>
    <%  if(isNaN(propOfProp)){ %>   
    <%- propOfProp%>
    <% } }%>
    <% } %>
    <%  }); %>

    <%  } %>
    <%  } %>
    <%  } %>
    <%  } } %>


但是,在不久的将来,您可能需要重新考虑在前端执行所有这些代码,因为您最终会以任何一种方式调用服务器。EJS的思想是在服务器上呈现代码,并将所有数据都放在服务器上,然后您可以在其中循环。如果可能,将其放入底部的标签中,或者在控制器上执行(如果这是MVC)。另外,您不需要在属性之间循环,然后拥有自己的属性,它只会在已经存在的属性之间循环。

无意冒犯,但这是一个丑陋的代码。你在哪里使用console.log?我的意思是用console.log替换它会有用的。如果你知道如何使用ejs使代码看起来更干净,请告诉我。我想知道,一旦你已经在属性中循环,为什么你会看到它是否有自己的属性?用console.log(PropProfProp)替换它是什么意思?你是说如果你真的工作了?在我看来,既然您只是在那里使用javascript,那么就应该让它成为javascript。或者在服务器上执行所有操作,而不是尝试在服务器上执行所有操作,然后将其绑定到模板,通常,视图是渲染变量,而不是执行复杂的JS。。。