Javascript 为什么我无法读取属性';toString';未定义的

Javascript 为什么我无法读取属性';toString';未定义的,javascript,node.js,Javascript,Node.js,我使用软件包。我在slug函数的开头添加了这些console.log function slug(string, opts) { console.log('log 1: -------'); console.log('log 2: ' + string); console.log('log 3: ' + typeof string); string = string.toString(); .... } console.log(result);

我使用软件包。我在slug函数的开头添加了这些
console.log

function slug(string, opts) {
    console.log('log 1: -------');
    console.log('log 2: ' + string);
    console.log('log 3: ' + typeof string);
    string = string.toString();
    ....
 }
    console.log(result);
    return result;
};
以下是输出:

log 1: -------
log 2: Yüzey Aktif Maddeler
log 3: string
/Users/------/seeder/node_modules/mongodb/lib/utils.js:99
    process.nextTick(function() { throw err; });
                                  ^

TypeError: Cannot read property 'toString' of undefined
    at slug (/Users/------/seeder/node_modules/slug/slug.js:16:20)
    at Object.createSlug (/Users/------/seeder/seeder/utils.js:4:9)
    at getContent (/Users/------/seeder/seeder/content-seeder.js:345:22)
    at topic.contents.forEach.content (/Users/------/seeder/seeder/content-seeder.js:425:31)
    at Array.forEach (native)
    at /Users/------/seeder/seeder/content-seeder.js:424:21
    at /Users/------/seeder/node_modules/mongodb/lib/collection.js:523:5
    at /Users/------/seeder/node_modules/mongodb/lib/collection.js:701:5
    at handleCallback (/Users/------/seeder/node_modules/mongodb/lib/utils.js:96:56)
    at executeCommands (/Users/------/seeder/node_modules/mongodb/lib/bulk/ordered.js:405:12)
即使字符串参数的类型是字符串,
string.toString()
也会抛出类型错误。它说字符串未定义

我不是一个有经验的js开发人员。为什么会发生这种情况

编辑: 我从这个函数调用它

function getContent(content, categoryId) {
    console.log(content.topicVideo);
    return {
        // _id: Random.id(),
        // other properties
        contentSlug: slug(content.topicVideo.contentName, {
            lower: true
        })
    };
}
新日志:

{ id: '197505065',
  categorySort: 18,
  categoryName: 'Hayatımızda Kimya',
  contentSort: 2,
  contentName: 'Yüzey Aktif Maddeler',
  fileName: 'KonuAnlatimi.mp4' }
编辑:

我在slug函数的末尾添加了一个日志

function slug(string, opts) {
    console.log('log 1: -------');
    console.log('log 2: ' + string);
    console.log('log 3: ' + typeof string);
    string = string.toString();
    ....
 }
    console.log(result);
    return result;
};
这会打印结果,然后抛出错误

log 1: -------
log 2: Yüzey Aktif Maddeler
log 3: string
log 4: Yüzey Aktif Maddeler
yuzey-aktif-maddeler
编辑:我认为这一行给出了一个提示:

/Users/------/seeder/node_modules/mongodb/lib/utils.js:99
    process.nextTick(function() { throw err; });

我认为它记录了正确的字符串,但在未定义的字符串上失败,而没有记录日志。这可能吗?我发现content.topicVideo.contentName中的一个实际上是未定义的。但是错误是在没有记录的情况下抛出的。这可能吗?

也许您应该检查字符串是否有falsy值,并且(如果不是字符串,也可以选择)

来自MDN:

法尔西 falsy值是在布尔上下文中求值时转换为false的值


关于JavaScript中falsy值的更多信息

以下代码运行良好(在脚本中添加slug.js模块进行测试)。也许这将帮助您分析代码

(函数(根){
//懒惰需要符号表
变量符号,移除列表;
功能符号(代码){
如果(_符号)返回_符号[代码];
_符号=要求('unicode/category/So');
removelist=[‘符号’、‘十字’、‘of’、‘符号’、‘标尺’、‘手’、‘黑色’、‘白色’]
.map(函数(单词){returnnewregexp(单词'gi')});
返回符号[代码];
}
函数段塞(字符串、选项){
string=string.toString();
如果('string'==选项类型)
opts={替换:opts};
opts=opts |{};
opts.mode=opts.mode | | slug.defaults.mode;
var defaults=slug.defaults.modes[opts.mode];
变量键=['replacement'、'multicharmap'、'charmap'、'remove'、'lower'];
对于(var key,i=0,l=keys.length;i“要确保.toString()不会引发错误,可以:

string = "" + string; // amends the value to an string, even if its undefined or null etc
而不是:

string = string.toString();
但是,您也可以检查string的值是否未定义或为null。 另请参见。

您可以使用

function slug(string, opts) {
    console.log('log 1: -------');
    console.log('log 2: ' + string);
    console.log('log 3: ' + typeof string);
    string = String(string);
    ....
 }

你确定它是在抛出那一行吗?你能在一个代码片段中重现这个问题吗?是的。我已经检查了行号。这不应该发生,你需要提供一个更完整的例子,否则我们无法真正帮助你。是的,你给出的例子没有抛出错误:不,他们没有。对不起@fumaThis是一个广泛使用的npm模块。我我不想更改代码,但至少我建议检查null或undefined是否会引发错误。