【问题标题】:Javascript: why to declare the same value of the same variable twice?Javascript:为什么要两次声明同一个变量的相同值?
【发布时间】:2017-01-04 15:07:15
【问题描述】:

我希望出现提示并要求用户输入正确的密码。并且每次用户输入错误的密码时,提示应该重新出现。我不明白为什么以下代码不起作用:

var secret = prompt("What is the password?");
while ( secret !== "sesame" ) {
 secret;    
}
document.write("Welcome.");

如果"secret" 是一个全局变量,那么在while 循环中它应该被解释为具有prompt("What is the password?") 的值?

但事实证明我应该在 while 循环中写 secret = prompt("What is the password?");

var secret = prompt("What is the password?");
    while ( secret !== "sesame" ) {
     secret = prompt("What is the password?");    
    }
    document.write("Welcome.");

为什么要两次声明变量secret的相同值?

【问题讨论】:

  • prompt() 是一个函数,而不是一个值
  • 好吧,我不确定你期望while 循环内的secret 在第一个示例中执行什么操作,因为它没有做任何事情
  • 你知道JS密码没用吧?
  • 所有反对票是为了什么?他问了一个有效的问题。仅仅因为他是一个菜鸟开发者,并不意味着他应该被否决。
  • @AndrewL。读什么?如果每个人在提问之前都已经阅读了他们需要知道的内容,那么就不需要 SO

标签: javascript function while-loop


【解决方案1】:

当您在变量中分配表达式时,变量只包含该表达式返回的值,而不是表达式本身

因此,计算变量不会有任何影响,也不会再次计算分配的表达式。

如果不想重复函数调用,可以使用do while循环

var secret;
do {
  secret = prompt("What is the password?");
} while ( secret !== "sesame" ); 

当然,JS密码没用

【讨论】:

    【解决方案2】:

    简单的secret; 代码行什么都不做——它只是引用一个名为secret 的变量,但什么也不做。

    你的意思是:

    var secret;
    while(secret !== 'secretpassword') secret = prompt("What's the password?");
    

    对于循环的第一次迭代secret 不等于秘密密码,因此运行提示。它会重复运行,直到输入正确的。

    但是,您的方法存在很多问题。

    首先,持久的对话窗口(提示是一种)不是很友好的用户界面;他们必然需要关注,所以你不能在不与他们互动的情况下点击离开他们。如果用户想要关闭提示并单击“忘记通过”链接或使用页面的其他部分怎么办?

    其次,在 JavaScript 中存储密码是一个巨大且明显的安全风险,但我假设这是一个不关注安全性的教程或作业。

    第三,document.write() 早就被弃用了,现在几乎没有用了。而是查看 DOM 脚本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多