为什么变量的值会在if

时间:2015-07-07 11:17:51

标签: javascript operators

请看下面这个小片段:

var a = 1;

if(! (--a)) { // when i say --a i did't mean to say "change the value of a" i just meant to say "without manupulating the actual value of a , just check if --a is falsy"
  console.log('ok');
}

console.log(a); // 0 ... WHY ? i never intended to change the value of a 

有人可以告诉我为什么当我没有明确地将a的值设置为--a时,是否正在进行操作?在代码中存在的if条件中,我真的意味着实际上减少了a的值,这只是我教过的一个if check,会改变a的值。

我猜,我显然是错的。我只是想知道,这只是一个javascript的东西,还是所有编程语言共同的? (I.E.能够在if条件中处理变量的值,而实际上你想要做的只是临时管理变量的值而不是改变实际值。)

P.S。:对不起,如果这个问题听起来真的很琐碎,但对我来说很重要。

编辑:没有要求解释a - 和--a是如何工作的,我想知道为什么:

计划一:

var a = 1;

--a;

console.log(a) // my expected output is 0

计划二:

var a = 1;

if(--a){};

console.log(a) // my expected output is still 1 , because i did't expect --a inside the if to actually manipulate a. 

所以基本上我的问题是为什么--a在if 中工作而不是--a如何工作!

7 个答案:

答案 0 :(得分:7)

这是递减( - )运算符。

  

递减运算符递减(减去一个)其操作数并返回一个值。

如何--a工作

--a相当于a = a - 1。因此,当您使用--a时,a的值首先递减,然后在表达式中使用。这不仅仅适用于Javascript,对于大多数编程语言来说都是常见的。

要检查值减1是否为零,可以使用

if (!(a - 1)) {

答案 1 :(得分:2)

如果不仅是条件语句,而且还执行代码,即评估条件

例如1:

if(a == 5) {} //checking value of a

if(a = 5) //assigning 5 to a but also checking value of a as Undefined, null

例如2:

同样在 for ... loop

for(var i=0; i<10; i++)
完成启动,条件检查和价值更新

在你的情况下 - a 也会充当代码声明,之后它将作为条件语句执行并返回值 0 表示您将获得变量改变了,将否定它并将使其成为现实(尽管你提出的要求并不重要)。

if(! (--a)) { // when i say --a i did't mean to say "change the value of a" i just meant to say "without manupulating the actual value of a , just check if --a is falsy"
  console.log('ok');
}

console.log(a);

答案 2 :(得分:1)

--是递减运算符。它将变量的值减少一个就地,就像您经历过的那样。

答案 3 :(得分:1)

这是减量运算符。递减变量的值将存储在内存中,即使它在条件表达式中。

您应该尝试使用以下内容:

var a = 1;
var b = a - 1;
if (!(b)) {
  console.log('ok');
}

console.log(a);

答案 4 :(得分:0)

someNumber - 将首先读取变量值,然后从中减去1。

- someNumber 将首先减1,然后读取变量值。

无论如何,它修改该值。

答案 5 :(得分:0)

--++运算符是'执行'类型运算符,它们正在调用中进行评估。

您应该使用以下语法:

if(!(a - 1)) { 
  console.log('ok');
}

答案 6 :(得分:0)

--a是一个表达式,它首先递减a,其值为 new a

对于C,C ++,Java和Javascript都是如此。

如果您想检查a - 1 是否为假,请写if (!(a - 1))或更清楚if (a == 1)。这些表达式中的任何一个都不会更改a的值。