Javascript 测试时变量可能尚未初始化
我试图理解为什么我在测试时得到“变量可能尚未初始化”(变量==“某些文本”),但在使用时却得不到(密码hashorg的类型!==“未定义”) 工作守则: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
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==未定义)没有收到任何警告,但代码不起作用。那么可能这取决于所比较变量的类型