我试图理解为什么我在测试时得到“变量可能尚未初始化”(变量===“某些文本”),但在使用时却没有得到(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/