Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么需要JSON.stringify来保留一个对象';将其从node.js导入EJS模板时的值?_Node.js_Ejs - Fatal编程技术网

为什么需要JSON.stringify来保留一个对象';将其从node.js导入EJS模板时的值?

为什么需要JSON.stringify来保留一个对象';将其从node.js导入EJS模板时的值?,node.js,ejs,Node.js,Ejs,环境:Node.js、Express、EJS 当使用JSON.stringify()处理从node.js传递到EJS模板的对象时,对象保留其原始值。虽然有效,但我发现这个结果出乎意料JSON.stringify将对象转换为字符串。为什么在这种情况下,这似乎起到了相反的作用 在Node.js文件中: app.get('/', function(req, res) { let myArray = [1, 5]; let myObject = { cats: 2,

环境:Node.js、Express、EJS

当使用
JSON.stringify()
处理从
node.js
传递到
EJS
模板的对象时,对象保留其原始值。虽然有效,但我发现这个结果出乎意料
JSON.stringify
将对象转换为字符串。为什么在这种情况下,这似乎起到了相反的作用

在Node.js文件中:

app.get('/', function(req, res) {

    let myArray = [1, 5];

    let myObject = {
        cats: 2,
        dogs: 0
    }

    res.render('index', { myArray, myObject });

})
<script>
    let importedArray = <%- JSON.stringify(myArray) %>;
    let importedObject = <%- JSON.stringify(myObject) %>;
</script>
EJS:

app.get('/', function(req, res) {

    let myArray = [1, 5];

    let myObject = {
        cats: 2,
        dogs: 0
    }

    res.render('index', { myArray, myObject });

})
<script>
    let importedArray = <%- JSON.stringify(myArray) %>;
    let importedObject = <%- JSON.stringify(myObject) %>;
</script>

因为ejs只呈现字符串文本,当在json上使用toString时,它将获得“[object object]”,而不是您的真实内容

,因为当您试图为将位于网页内的
标记中的脚本指定源代码时,您需要生成原始Javascript源代码,使您的对象出现在网页中

因此,您需要某种方法将实时服务器端Javascript对象转换回描述同一对象的Javascript源代码
JSON.stringify()
就是生成Javascript源代码的一种方法

如果您不使用类似于
JSON.stringify()
的东西,只需传递实际的Javascript对象,EJB就会发现它不是一个字符串,它会调用
obj.toString()
,尝试获取它的字符串表示形式。不幸的是,Javascript对象的
.toString()
实现只会生成
“[object object]”
,这在EJS模板中是完全无用的。因此,您不能这样做-您必须手动生成正确的Javascript源代码字符串。而且,
JSON.stringify()
就是这样一种方法