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

标签 javascript node.js

我试图理解为什么我在测试时得到“变量可能尚未初始化”(变量===“某些文本”),但在使用时却没有得到(typeofpasswordHashOrg!=='未定义')

工作代码:

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');
        }

    });
}

以及我得到的代码“变量可能尚未初始化”:

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 (passwordHashOrg === 'some text') {
            callback(null, 'userExist');
        } else {
            callback(null, 'unknownUser');
        }

    });
}

这两个代码唯一不同的是:

if(passwordHashOrg 类型!== '未定义'){

if (passwordHashOrg === "一些文本") {

最佳答案

警告的意思正如它所说的那样 - 变量可能在比较时尚未用值初始化。由于这是预期的行为,并且基本上正是您想要测试的行为,因此可以安全地忽略该警告。或者,使用

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

那么为什么在使用typeof时没有收到警告呢?因为这不一定评估变量的值,并且可能被 jshlint 视为对非初始化变量合理(它甚至适用于未声明的变量)。如果您将该值与 undefined 进行比较,您可能会收到相同的警告。

关于javascript - 测试时变量可能尚未初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31146863/

相关文章:

javascript - 在 promise 链中创建错误

node.js - 重定向时 Express 上未设置 Csrf token

node.js - 在C驱动器( Electron )中创建本地文件

javascript - 如何在 Atom-Shell 中运行 reload() 和 open()

javascript - 细胞景观 : TypeError even with the tutorial

javascript - 单击按钮时无法修改字形图标类

javascript - 在 HTML 文本区域中打印 PHP 变量

javascript - 中心推特嵌入 iframe

node.js - 如何判断使用 Node.js 选择了哪个单选按钮

javascript - 如何将 fadeIn 添加到我的 show_hide() 函数中?