Javascript 测试时变量可能尚未初始化

Javascript 测试时变量可能尚未初始化,javascript,node.js,Javascript,Node.js,我试图理解为什么我在测试时得到“变量可能尚未初始化”(变量==“某些文本”),但在使用时却得不到(密码hashorg的类型!==“未定义”) 工作守则: checkPass('share', function (error, response) { "use strict"; if (error) { console.log(error); } else { console.log(response); } }); functio

我试图理解为什么我在测试时得到“变量可能尚未初始化”(变量==“某些文本”),但在使用时却得不到(密码hashorg的类型!==“未定义”)

工作守则:

checkPass('share', function (error, response) {
    "use strict";
    if (error) {
        console.log(error);
    } else {
        console.log(response);
    }
});

function checkPass(username, callback) {
    "use strict";

    // Require
    var fs = require('fs');

    // Static Parameters
    var usernameInput = username;

    // Open shadow file
    fs.readFile('/etc/shadow', function (error, file) {
        if (error) {
            return callback(error); // file does not exit
        }
        // file is a buffer, convert to string and then to array
        var shadowArray = file.toString().split('\n');

        var passwordHashOrg;
        shadowArray.forEach(function (line) {
            var shadowLineArray = line.split(":");
            var usernameOrg = shadowLineArray[0];
            if (usernameOrg === usernameInput) {
                passwordHashOrg = shadowLineArray[1];
            }
        });
        if (typeof passwordHashOrg !== 'undefined') {
            callback(null, 'userExist');
        } else {
            callback(null, 'unknownUser');
        }

    });
}
我得到的代码“变量可能尚未初始化”:

这两种代码的唯一区别是:

if(密码hashorg!的类型==“未定义”){
vs

如果(passwordHashOrg==“some text”){

警告的意思就是它所说的-在比较时变量可能没有用值初始化。因为这是预期的行为,基本上就是您想要测试的,所以可以安全地忽略警告。或者,使用

var passwordHashOrg = null; // or
var passwordHashOrg = undefined; // or whatever default value you want

那么为什么在使用
typeof
时没有得到警告呢?因为这不一定是在评估变量的值,jshlint可能会认为这在未初始化的变量上是合理的(甚至在未声明的变量上也是有效的)。如果将值与
未定义的值进行比较,则可能会得到相同的警告。警告的意思就是它所说的-在比较时,变量可能没有用值初始化。由于这是预期的行为,并且基本上正是您要测试的,因此可以安全地忽略该警告。Alte例如,使用

var passwordHashOrg = null; // or
var passwordHashOrg = undefined; // or whatever default value you want

那么为什么在使用
typeof
时没有得到警告呢?因为这不一定是在评估变量的值,jshlint可能会认为这在未初始化的变量上是合理的(甚至在未声明的变量上也是有效的)。如果将值与
未定义的值进行比较,则可能会得到相同的警告。警告的意思就是它所说的-在比较时,变量可能没有用值初始化。由于这是预期的行为,并且基本上正是您要测试的,因此可以安全地忽略该警告。Alte例如,使用

var passwordHashOrg = null; // or
var passwordHashOrg = undefined; // or whatever default value you want

那么为什么在使用
typeof
时没有得到警告呢?因为这不一定是在评估变量的值,jshlint可能会认为这在未初始化的变量上是合理的(甚至在未声明的变量上也是有效的)。如果将值与
未定义的值进行比较,则可能会得到相同的警告。警告的意思就是它所说的-在比较时,变量可能没有用值初始化。由于这是预期的行为,并且基本上正是您要测试的,因此可以安全地忽略该警告。Alte例如,使用

var passwordHashOrg = null; // or
var passwordHashOrg = undefined; // or whatever default value you want


那么为什么在使用
typeof
时没有得到警告呢?因为这不一定是在评估变量的值,jshlint可能会认为这在未初始化的变量上是合理的(甚至在未声明的变量上也是有效的)。如果将值与
未定义的

进行比较,您可能会收到相同的警告。在我看来,您不必为了比较变量的类型而初始化变量。可能未初始化变量的类型已经是“未定义的”?这是jslint还是jshint警告?请适当标记您的问题。问题是:我正在尝试要在linux卷影文件中查找特定用户,如果该用户存在,请执行某些操作。问题是:当我尝试测试变量“passwordHashOrg”是否具有某些值时,为什么会得到“UnknowUser”,但如果我测试定义的值是否成功。@AdrianGherasim:可能是因为卷影文件不太可能包含“
某些文本”
”?在我看来,您不必为了比较其类型而初始化变量。可能未初始化变量的类型已经是“未定义的”?这是jslint还是jshint警告?请适当标记您的问题。问题是:我正在尝试在linux卷影文件中查找特定用户,如果该用户存在,请执行某些操作。que问题是:当我试图测试变量“passwordHashOrg”是否有一些值,但如果我测试它是否成功,为什么会得到“unknownUser”。@AdrianGherasim:可能是因为卷影文件不太可能包含“
一些文本”
”?在我看来,您不必为了比较其类型而初始化变量。可能未初始化变量的类型已经是“未定义的”?这是jslint还是jshint警告?请适当标记您的问题。问题是:我正在尝试在linux卷影文件中查找特定用户,如果该用户存在,请执行某些操作。que问题是:当我试图测试变量“passwordHashOrg”是否有一些值,但如果我测试它是否成功,为什么会得到“unknownUser”。@AdrianGherasim:可能是因为卷影文件不太可能包含“
一些文本”
”?在我看来,您不必为了比较其类型而初始化变量。可能未初始化变量的类型已经是“未定义的”?这是jslint还是jshint警告?请适当标记您的问题。问题是:我正在尝试在linux卷影文件中查找特定用户,如果该用户存在,请执行某些操作。que问题是:当我尝试测试变量“passwordHashOrg”是否有某个值时,为什么会得到“unknownUser”,但如果我测试定义的值是否成功。@AdrianGherasim:可能是因为阴影文件不太可能包含“
某些文本”
”?如果我(passwordHashOrg==未定义)我没有收到任何警告,但代码不起作用。那么可能这也取决于比较值的类型-它警告您,未初始化的变量将无法通过字符串文本的类型检查。
==
。是的,但为什么?我真的不明白,如果测试都在forEach之后,那么为什么两者都不成功?重点是:你不必在意。你似乎知道变量仍然是
未定义的
,或者包含字符串,你应该测试你想要做什么。如果我(passwordHashOrg==未定义)没有收到任何警告,但代码不起作用。那么可能这取决于所比较变量的类型