2

最近我在互联网上看到一个在 javascript 中工作的语句,我想知道我在 if 语句中主要使用的 javascript 中单个等号 (=) 的含义是什么。
它是一个包含双等号 (==) 的比较函数

if(i = 1) {
    alert(i);
}

这行得通,我想知道当 if 语句被分配给变量 i 的值 1 并检查 i 的值时会发生什么,这与以下内容相同:

i = 1
if(i) {
    alert(i)
}

但是我很快意识到值变量的赋值需要有关键字 var 所以我将代码更改为:

  if(var i = 1) {
        alert(i);
  }

这次代码不起作用。为什么?

4

6 回答 6

5

您分析的第一部分当然是正确的。

现在,有趣的部分可能是为什么您的最后一个代码if (var ...) {不起作用。

它不起作用,因为

1)

var something

是一个语句,而不是一个表达式。

2) 以下是 ECMAScript 定义if 语句的方式:

如果语句:

if ( 表达式 ) 语句 else 语句

if ( 表达式 ) 语句

您必须在子句中放入表达式if,而不是语句。

本文中有关表达式与语句的更多信息。

于 2013-07-31T15:24:17.833 回答
3

如果您检查控制台,它会显示Unexpected token var. 您只是不应该在 if 语句的条件下声明变量。

如果您确实打算在条件内进行赋值,只需先声明变量,如下所示:

var i;
if(i = 1){
   alert(i);
}

不过,我看到您已经知道分配和比较之间的区别,这很好:)

于 2013-07-31T15:24:33.913 回答
1

Single=是一个赋值运算符,在 if 语句中总是等于 true(假设它是一个非负值)。

Double =,如==,是一个比较,只有当运算符两边的值相等时才等于 true。

于 2013-07-31T15:24:11.880 回答
1

单个“=”表示“分配给左侧变量”。

作为 IF 的返回值,您获得分配的值,并且由于它是 1,因此执行“真”分支。

但是,如果您将“var”放入 IF,它不会返回分配的值,我认为它甚至根本不起作用。

错误的“=”和“==”是一个常见的错字。

于 2013-07-31T15:25:01.637 回答
1

Single=确实是一个赋值,如果你把它放在 if 条件中,它不会i与 1 比较,而是用值 1 分配变量i,然后将该值用作条件本身,产生i一个真实值。所以是的,它和你的第二个例子一样。

此外,在 javascript 中,如果您期望项目是相同的类型,最好使用它来===代替:==

if (1 == '1') {
  alert('this is true'); // where you might actually expect it to be false, 

===在这种情况下,如果您使用三等号 ( ) ,它将正常工作。

if (1 === '1') {
  alert('this is false'); // which is expected
}
于 2013-07-31T15:26:43.040 回答
0

您的断言是正确的,因为代码本质上是将值分配给1然后i评估表达式的真实性(1强制为true,因此条件通过)。

最后一个示例失败,因为您不能在条件表达式中声明变量。

当您没有显式调用var关键字时,该值将被分配给i在您的范围内可用的任何现有变量,或者,如果不存在,则创建一个属性i并将其分配给全局对象 ( window),这些都可以在没有调用全局对象(这就是为什么调用,saylocation将引用回window.location- 除非您已var location在范围内定义)。

于 2013-07-31T15:26:52.187 回答