【问题标题】:Assignments in the condition part of if and while statementsif 和 while 语句的条件部分中的赋值
【发布时间】:2018-09-20 07:48:38
【问题描述】:

这里引用Crockford:

赋值表达式

避免在 if 和 while 语句的条件部分进行赋值。

是

if (a = b) {

一个正确的陈述?或者是

if (a == b) {

打算?避免那些不容易被确定为正确的结构。

// Here is an assignment as I understand it:
var var1 = "foo";
var var2 = "bar";

// And what is shown in Crockford's quote isn't an assignment.

那么,克罗克福德的名言是什么意思?

【问题讨论】:

  • @nurdyguy:并非总是如此。试试这个:var b = ""; var a; if (a = b) { ... }

标签: javascript jslint


【解决方案1】:

意思是

if (a = b) {

实际上是一个赋值,将b的值赋值给a,这通常不是人们想要的。

那段话只是告诉你要小心,只有在你真正的意思时才这样做,而你通常不会这样做。通常人们想在那里做一个比较,所以

if (a == b) {

反例:如果您运行以下命令,只有在您向确认弹出窗口提供 OK 时才会打印 true,否则不会打印。

if(a = confirm('test')) { console.log(a) }

注意有一个赋值,我们在if 中打印a 的值。

【讨论】:

    【解决方案2】:
       var username = prompt("username");
       var password = prompt("password");
    
       if(username = "youdontknowme") 
         if(password = "12345678")
            alert("logged in successfully!");
    

    看起来对吗?就试一试吧!因此,大多数 IDE 会警告您,分配可能应该是一个比较。如果您没有这样的 IDE,您需要自己发现它,这就是 Crockford 先生试图让您意识到它的原因。

    【讨论】:

      猜你喜欢
      • 2016-09-07
      • 2020-05-01
      • 2011-10-30
      • 2020-08-07
      • 2018-07-26
      • 2016-02-29
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      相关资源
      最近更新 更多