【问题标题】:Node.js Object on the server is not an object on the client服务器上的 Node.js 对象不是客户端上的对象
【发布时间】:2019-12-24 03:22:19
【问题描述】:

我在 Node.js 的服务器端有一个变量,它是一个对象。我可以用console.log(typeof(value)); 验证这一点,我得到object

当我执行console.log(value); 时,我得到了

[ 'bla_bla_1',
  'bla_bla_2',
  'bla_bla_3',
]

然后我用 Express:res.render('target.ejs', {data:value}); 将变量传递给客户端,然后 ejs 文件用 var value = '<%= data %>'; 解析它

我想知道它是一个对象还是一个数组,以便弄清楚如何在客户端处理它。

我写了一个小脚本来测试它:

if (typeof(value) === 'object') {console.log("IT'S AN OBJECT");}
else {console.log("IT'S NOT AN OBJECT");}
if ( Array.isArray(value) ) {console.log("IT'S AN ARRAY");}
else {console.log("IT'S NOT AN ARRAY");}

我得到的是浏览器控制台中的这个:

IT'S NOT AN OBJECT
IT'S NOT AN ARRAY

【问题讨论】:

标签: javascript arrays node.js object


【解决方案1】:

通过 EJS 语法解析后的值是一个简单的字符串。

EJS Doc 指定如何按原样设置值。

<%-将未转义的值输出到模板中

试试下面:

var value = <%- JSON.stringify(data) %>;

【讨论】:

  • 我在控制台中收到此错误:“Uncaught SyntaxError: Unexpected token & in JSON at position 1 at JSON.parse ()”
  • @user1584421 在将值发送到客户端之前,您还需要在服务器上JSON.stringify
  • 谢谢!但现在我得到了“IT'S AN OBJECT”和“IT'S AN ARRAY”。
  • @user1584421 是的。 JavaScript Array 既是一个对象又是一个数组 :)
  • 谢谢!这是否意味着我可以像普通数组一样进行迭代?我可以运行 array.length 之类的数组方法吗?
【解决方案2】:

对象有“{”和“}” 常量 obj = { 关键2:“价值” }

而数组有 [ ]

对象有键值,数组没有,但是如果你是一个正统的人那么你就会知道,数组是一个对象

不要相信我,但我认为 typeof 用于原始值,而且我们知道数组不是对象,最好使用 instanceof

【讨论】:

    【解决方案3】:

    来自MDN

    属性名称必须是双引号字符串;尾随逗号是禁止的。

    这意味着您需要替换parsing之前的无效字符:

    var origvalue = "[ 'bla_bla_1','bla_bla_2','bla_bla_3', ]";
    var value =  JSON.parse(origvalue.replace(/'/g, '"').replace(/,[^,]*\]/, '\]'));
    if (typeof(value) === 'object') {console.log("IT'S AN OBJECT");}
    else {console.log("IT'S NOT AN OBJECT");}
    if ( Array.isArray(value) ) {console.log("IT'S AN ARRAY");}
    else {console.log("IT'S NOT AN ARRAY");}

    【讨论】:

      猜你喜欢
      • 2013-11-29
      • 1970-01-01
      • 2012-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-17
      • 2017-07-14
      • 2016-11-07
      相关资源
      最近更新 更多