Javascript 对未定义的变量进行说明

Javascript 对未定义的变量进行说明,javascript,conditional,Javascript,Conditional,对于如何解释一个未定义的变量,我有点困惑(我不确定你现在是否能解释)。我试图使用下面代码底部(注释掉的那行)附近的if-else语句 其想法是,如果请求歌曲的人不是参与者或狗,则应运行相关警报。函数一被调用,解释器就识别出“guy”没有定义,这破坏了一切。我可以很容易地解释一个未定义的变量,但有可能解释一个未定义的变量吗?我试过各种各样的方法,但实际上似乎不可能 有什么想法吗 function Attendee(name) { this.name = name; } var dan = n

对于如何解释一个未定义的变量,我有点困惑(我不确定你现在是否能解释)。我试图使用下面代码底部(注释掉的那行)附近的if-else语句

其想法是,如果请求歌曲的人不是参与者或狗,则应运行相关警报。函数一被调用,解释器就识别出“guy”没有定义,这破坏了一切。我可以很容易地解释一个未定义的变量,但有可能解释一个未定义的变量吗?我试过各种各样的方法,但实际上似乎不可能

有什么想法吗

function Attendee(name) {
  this.name = name;
}

var dan = new Attendee('Dan');
var christer = new Attendee('Christer');
var mooney = new Attendee('Mooney');

function Dog(name) {
  this.name = name;
}

var murphy = new Dog('Murphy');
var lotty = new Dog('Lotty');
var willow = new Dog('Willow');


var songs = ['Vacationer - Farther', 'Tapes - Crowns', 'Lapalux - Straight Over My Head', 'Ben Khan - Youth', 'Touch Sensitive - Pizza Guy', 'Atu - The Duo', 'XO - The Light', 'Sohn - Artifice', 'Cambio Sun - Mad As They Come', 'Majical Cloudz - Your Eyes', 'Chet Faker - Talk is Cheap', 'Raffertie - Build Me Up', 'Oceaan - Candour', 'Oscar Key Sung - All I Could Do', 'Kenton Slash Demon - Harpe', 'Odesza - How Did I Get Here?', 'Tiger Tsunami - Antarctica', 'Gallant - Open Up'];

  var addSong = function(song, requester) {

    if (requester instanceof Attendee) {
      if (songs.indexOf(song) >= 0) {
        alert('Thanks, we\'ve already got that one!');
      } else {
        songs.push(song);
      }
    } else if (requester instanceof Dog) {
      alert(requester.name + ', you\'re a dog! You can\'t request a song!');
//    } else if () {
      alert('Who invited you?');
    }

  };

addSong('Vacationer - Farther', guy);

在引用变量之前,必须检查变量是否已定义

if (typeof guy !== "undefined") {
   addSong('Vacationer - Farther', guy);
} else {
   alert("Who invited you?");
}
如果您希望调用您的
addSong
,即使
guy
未定义

   addSong('Vacationer - Farther', typeof guy !== 'undefined' && guy);

如果
guy
未定义,则将作为请求者传递
false

您从哪里获得
guy
(作为变量名)?不,您没有理由对无效代码执行任何操作。当然,您可以使用
try catch
,但在
addSong
中,这是我想知道的;因为它是无效代码,所以无法执行任何操作。我必须重新考虑如何识别歌曲请求者。如果我通过名称属性引用它们,我应该能够传入字符串,并让任何不是现有对象名称属性的字符串触发警报。谢谢您的回答。我不想检查变量是否未定义,而是希望能够解释它是否未定义。我希望能够传入一个从未声明过的变量,并运行该警报。正如Bergi在原始帖子的评论中所说,我的代码是无效的,因为我引用了一个从未声明过的变量。一切都完了!我必须重新考虑一切。
   addSong('Vacationer - Farther', typeof guy !== 'undefined' && guy);