看到意想不到的"未定义的“;在Node JS提供的字符串中

Seeing unexpected "undefined" in strings served by Node JS

本文关键字:JS Node 字符串 未定义 意想不到 quot      更新时间:2023-09-26

我刚刚用NodeJS创建了一个非常简单的web服务器,它询问JSON文件的名称,然后在其中循环,并将其中的某些键作为"格式化"的文本文件提供。

代码:

var http = require('http'),
prompt = require('readline').createInterface({
    input: process.stdin,
    output: process.stdout
});
prompt.question("Which library? ", function (whichlib) {
    "use strict"
    var lib = require("./bot-client/lib/" + whichlib),
        rules = lib.data.ruleset,
        parse = function (ruleset, prefix) {
            var key,
                str;
            for (key in ruleset) {
                str += prefix + " -  " + key + "'n";
                str += (ruleset[key].hasOwnProperty("ruleset"))
                    ? parse(ruleset[key].ruleset, prefix + "'t")
                    : "";
            }
            return str;
        },
        str = parse(rules, "");
    console.log("Ready to serve page.");
    http.createServer(function (req, res) {
        console.log('Server running at http://127.0.0.1:8124/');
        res.writeHead(200, {'Content-Type': 'text/plain'});
        res.write(str);
        res.end();
    }).listen(8124, "127.0.0.1");
});

预期结果示例

 -  key1
     -  key1.1
         -  key1.1.1
         -  key1.1.2
     -  key1.2
         -  key1.2.1
         -  key1.2.2
         -  key1.2.3
     -  key1.3
         -  key1.3.1
         -  key1.3.2

实际结果示例

undefined -  key1
undefined    -  key1.1
undefined        -  key1.1.1
         -  key1.1.2
     -  key1.2
undefined        -  key1.2.1
         -  key1.2.2
         -  key1.2.3
     -  key1.3
undefined        -  key1.3.1
         -  key1.3.2

问题:

我根本不明白为什么"未定义"会出现,更不用说看到它的外观模式了。我是不是错过了一些显而易见的东西?

将字符串连接到仍然是undefined:的变量

 var key,
     str; //you don't set any value here
     for (key in ruleset) {
         str += prefix + " -  " + key + "'n";

在第四行中,str仍然未初始化。您可以通过将其设置为空字符串来修复它:

var key,
    str = '';
    for (key in ruleset) {
        str += prefix + " -  " + key + "'n";

是的,您缺少strkey的初始化。

在JavaScript中,如果您将一个未定义的变量连接为字符串,它将实际显示为undefined

在您的情况下,更改此:

        var key,
            str;

对此:

        var key = '',
            str = '';

初始化变量。