JavaScript 检查 "undefined" 时变量值被覆盖
JavaScript variable value gets overwritten when checking for "undefined"
我有一个函数在两种不同的情况下被调用。
场景 1 由下拉选择触发,我根据所选值设置变量 "sheetName"。
场景 2 没有触发事件,因此当我收集设置值所需的其他信息时,我想在我的代码中进一步设置变量。
现在我的问题是:当 场景 1 发生时,sheetName 被定义并且函数继续。但是使用下面的代码,sheetName 似乎是 undefined 一旦达到 if 条件 第二个代码。所以这里的值被 overwritten 因为程序认为 sheetName 是未定义的。
每当我删除 second 场景的 if 条件 时,一切正常并且 sheetName具有我之前在代码中定义的正确值。
我无法在 if/else 语句中定义两个值,因为对于第一种情况我需要 oEvent 而对于第二种情况我需要 wb 数据..
为什么 if 条件会删除我的变量的值?我检查不正确吗?
如果您还需要什么,请告诉我!
onSheetSelected : function(oEvent) {
var file = sap.ui.getCore()._file;
var oTable = this.getView().byId('uploadData');
// Sheet name gets defined for Scenario 1
if(oEvent !== undefined) {
var sheetName = oEvent.getSource().getSelectedItem().getText();
}
if(file && window.FileReader){
var reader = new FileReader();
var result = {}, data;
reader.readAsBinaryString(file);
reader.onload = function(e) {
var rawLog = reader.result;
data = e.target.result;
var wb = XLSX.read(data, {type: 'binary', cellDates: true, cellText: false, cellNF: true});
// Sheetname gets defined for Scenario 2
if(sheetName === undefined) {
var sheetName = wb.SheetNames[0];
}
var worksheet = wb.Sheets[sheetName];
... some other stuff going on...
}.bind(this);
};
},
由于 JavaScript Hoisting 您在第二种情况下重新声明它的变量
,您 运行 陷入了这个问题
function thing1() {
var sheetname = "this"
//this will look at thing1.sheetname
console.log(sheetname)
function thing2() {
// this will look at thing2.sheetname
if (sheetname === undefined) {
var sheetname = "that"
}
console.log(sheetname)
}
thing2()
}
thing1()
但是通过删除 var
它会查找直到找到一个名为 sheetname
的变量
function thing1() {
var sheetname = "this"
//this will look at thing1.sheetname
console.log(sheetname)
function thing2() {
// this will look at thing1.sheetname
if (sheetname === undefined) {
sheetname = "that"
}
console.log(sheetname)
}
thing2()
}
thing1()
我有一个函数在两种不同的情况下被调用。 场景 1 由下拉选择触发,我根据所选值设置变量 "sheetName"。 场景 2 没有触发事件,因此当我收集设置值所需的其他信息时,我想在我的代码中进一步设置变量。
现在我的问题是:当 场景 1 发生时,sheetName 被定义并且函数继续。但是使用下面的代码,sheetName 似乎是 undefined 一旦达到 if 条件 第二个代码。所以这里的值被 overwritten 因为程序认为 sheetName 是未定义的。
每当我删除 second 场景的 if 条件 时,一切正常并且 sheetName具有我之前在代码中定义的正确值。
我无法在 if/else 语句中定义两个值,因为对于第一种情况我需要 oEvent 而对于第二种情况我需要 wb 数据.. 为什么 if 条件会删除我的变量的值?我检查不正确吗?
如果您还需要什么,请告诉我!
onSheetSelected : function(oEvent) {
var file = sap.ui.getCore()._file;
var oTable = this.getView().byId('uploadData');
// Sheet name gets defined for Scenario 1
if(oEvent !== undefined) {
var sheetName = oEvent.getSource().getSelectedItem().getText();
}
if(file && window.FileReader){
var reader = new FileReader();
var result = {}, data;
reader.readAsBinaryString(file);
reader.onload = function(e) {
var rawLog = reader.result;
data = e.target.result;
var wb = XLSX.read(data, {type: 'binary', cellDates: true, cellText: false, cellNF: true});
// Sheetname gets defined for Scenario 2
if(sheetName === undefined) {
var sheetName = wb.SheetNames[0];
}
var worksheet = wb.Sheets[sheetName];
... some other stuff going on...
}.bind(this);
};
},
由于 JavaScript Hoisting 您在第二种情况下重新声明它的变量
,您 运行 陷入了这个问题function thing1() {
var sheetname = "this"
//this will look at thing1.sheetname
console.log(sheetname)
function thing2() {
// this will look at thing2.sheetname
if (sheetname === undefined) {
var sheetname = "that"
}
console.log(sheetname)
}
thing2()
}
thing1()
但是通过删除 var
它会查找直到找到一个名为 sheetname
function thing1() {
var sheetname = "this"
//this will look at thing1.sheetname
console.log(sheetname)
function thing2() {
// this will look at thing1.sheetname
if (sheetname === undefined) {
sheetname = "that"
}
console.log(sheetname)
}
thing2()
}
thing1()