检查 "undefined"时 JavaScript 变量值被覆盖

标签 javascript if-statement overriding undefined variable-declaration

我有一个函数在两种不同的情况下被调用。 场景 1 由下拉选择触发,我根据所选值设置变量 "sheetName"场景 2 没有触发事件,因此当我收集设置值所需的其他信息时,我想在代码中进一步设置变量。

现在这是我的问题:当场景 1 发生时,sheetName 被定义并且函数继续。但是对于下面的代码,sheetName 在达到第二个代码的 if 条件 时似乎是未定义。因此该值在这里被覆盖,因为程序认为sheetName 未定义。

每当我删除第二个 场景的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()

关于检查 "undefined"时 JavaScript 变量值被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53414330/

相关文章:

javascript - highchart - 将 xaxis 中的值显示为我从图表数据中获得的值,无需转换

java - 重写方法的多态参数

javascript - 编辑器 : Attache "keydown" event after SetData?

javascript - xxxx.xxx.xxx 的正则表达式

javascript - 在 CKEditor 的对话框中隐藏文本输入

java - 根据sql返回值设置java变量

Excel - 确定两个工作表之间是否存在工作表?

javascript - 如何识别数字0是零而不是偶数

C++ 类 : virtual and override, 或两者都不是?

java - 在java中重写类