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

时间:2015-06-30 19:31:04

标签: javascript node.js

我试图理解为什么我得到"变量可能没有被初始化"当我测试时(变量==="一些文字")但是当我使用时我得不到(typeof passwordHashOrg!==' undefined')

工作代码:

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(typeof passwordHashOrg!==' undefined'){
VS
if(passwordHashOrg ===" some text"){

1 个答案:

答案 0 :(得分:2)

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

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

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