我试图理解为什么我得到"变量可能没有被初始化"当我测试时(变量==="一些文字")但是当我使用时我得不到(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"){
答案 0 :(得分:2)
警告意味着它所说的 - 变量可能没有在比较时用值初始化。由于这是预期的行为,并且基本上就是您要测试的内容,因此可以安全地忽略警告。或者,使用
var passwordHashOrg = null; // or
var passwordHashOrg = undefined; // or whatever default value you want
那么为什么在使用typeof
时你没有收到警告?因为它不一定要评估变量的值,并且可能被jshlint视为非初始化变量的合理性(它甚至适用于未声明的变量)。如果您将值与undefined
进行比较,则可能会收到相同的警告。