最近我看到一条声明在互联网上的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);
}
这次代码不起作用。为什么呢?
答案 0 :(得分:5)
分析的第一部分当然是正确的。
现在,有趣的部分可能就是您的上一个代码if (var ...) {
不起作用的原因。
它不起作用,因为
1)
var something
is a statement,而不是表达。
2)这里是ECMAScript如何定义if statement:
IfStatement:
if(Expression)Statement else Statement
if(Expression)Statement
您必须在if
子句中放置一个表达式,而不是声明。
答案 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
。