为什么需要JSON.stringify来保留一个对象';将其从node.js导入EJS模板时的值?
环境:Node.js、Express、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,
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()
就是这样一种方法