单个等号如何在javascript中的if语句中起作用

时间:2013-07-31 15:19:43

标签: javascript

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

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

这有效,我想知道当if语句被赋值给变量i的值为1时会发生什么,并检查i的值是否相同:

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

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

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

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

6 个答案:

答案 0 :(得分:5)

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

现在,有趣的部分可能就是您的上一个代码if (var ...) {不起作用的原因。

它不起作用,因为

1)

var something

is a statement,而不是表达。

2)这里是ECMAScript如何定义if statement

  

IfStatement:

     

if(Expression)Statement else Statement

     

if(Expression)Statement

您必须在if子句中放置一个表达式,而不是声明。

More on expressions vs statement in this article.

答案 1 :(得分:3)

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

如果你真的想要在条件中进行赋值,只需先声明变量,如下所示:

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

我知道你已经知道了分配和比较之间的区别,这很好:)

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

单个“=”表示“分配给左边的var”。

作为IF的返回值,您将获得分配的值,并且因为它是1,所以执行“true”分支。

但是,如果你将“var”放入IF,它将不会返回指定的值,我认为它根本不会起作用。

错误“=”和“==”是一种常见的拼写错误。

答案 4 :(得分:0)

=确实是一个赋值,如果你把它放在if条件下它不会将i与1进行比较,而是将变量i赋值为1,然后使用它将值作为条件本身,使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
}

答案 5 :(得分:0)

您的断言是正确的,因为代码实际上是将值1分配给i,然后评估表达式的真实性(1同步到true,所以条件通过)。

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

如果您没有显式调用var关键字,则该值将分配给您的范围中可用的任何名为i的现有变量,或者,如果不存在,则创建属性{{ 1}}并将其分配给全局对象(i),它们都可以调用而不调用全局对象(这就是为什么调用,比如window将引用回location - 除非你已经在范围内定义了window.location