我不能在if语句中分配变量

时间:2019-12-12 15:48:03

标签: javascript if-statement

我刚刚开始学习JavaScript,并且对if语句有疑问:为什么当我在if内分配变量时,不需要在前面添加var并将其分配到if之外时,必须添加var。 因此,主要的问题是:为什么我不能像这样在var内添加if

if (var number = 5) {
   document.write("successful");
} else {
   document.write("failed");
}

如果我不添加变量,则将变量分配给这样的值

if (number = 5) {
    document.write("successful");
} else {
    document.write("failed");
}

我知道这是一个简单的问题,但这让我感到困惑。

3 个答案:

答案 0 :(得分:0)

可能您想做的是这样:

var number = 4;
if (number == 5){
    document.write("successful");
}
else{
    document.write("failed");
}

答案 1 :(得分:0)

这是因为var表示您声明了一个变量。但是,您不能在if条件中声明变量。您可以将条件赋值给先前声明的变量。这是Javascript的语法。

答案 2 :(得分:0)

JavaScript不支持块级作用域,这意味着在块结构(例如iffor循环)中声明变量不会限制该变量声明。

请记住,在分配给某物之前,您需要声明一个变量。

  • 声明变量
var x;
  • 变量的分配
x = 'variable x is a string that was previously declared';

这意味着在您的第一个语法不正确的示例中,您试图在语句中定义一个变量,该语句应对照其他内容检查该变量的真相。这似乎实际上是您在第二个示例中尝试做的事情,除了必须使用双等于==比较)或三等于===严格平等身份)。

这时,您可能想了解使用======的区别。

  • 使用单等于表示您正在声明或分配某些内容给变量
var a = 55;
  • 使用双精度等于您正在比较两种不同的事物(变量,数字,字符串等)
a == 55 /* In this case the output will be true if you have declared the previous variable */
  • 使用三元等于,您不仅要比较变量的内容,而且要比较变量的类型
a === 55 /* Will return true as the content is the same and also the type (they are both numbers) */

a === '55' /* Will return false, as you are comparing a number against a string */

请注意,JavaScript还具有两个变量 scopes :全局变量和局部变量。

  • 在函数外部声明的任何变量都属于全局范围,因此可以从代码中的任何位置访问。
var b = 'hello world';

function test() {
    console.log(b);
}

test();

/* Output will be:
hello world
*/
  • 每个函数都有自己的作用域,该函数中声明的任何变量只能从该函数和任何嵌套函数中本地访问
var b = 'hello world';

function test() {
    var b = 'Wonderful World';
    console.log(b);
}

console.log(b);
test();
console.log(b);

/* Output will be:
hello world
Wonderful World
hello world
*/