为什么变量的值会在if语句中发生变化

Ale*_*nik -7 javascript operators

看下面这个小片段的js:

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 
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我为什么当我没有明确地设定a --a的值时,是否正在被人类化的价值?在代码中存在的if条件中我真的并不是说实际上减少了a的值,它只是一个if check我教过并且会改变它的值a.

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

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

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

计划一:

var a = 1;

--a;

console.log(a) // my expected output is 0
Run Code Online (Sandbox Code Playgroud)

计划二:

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. 
Run Code Online (Sandbox Code Playgroud)

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

Tus*_*har 7

这是递减( - )运算符.

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

怎么样 - 一个工作

--a相当于a = a - 1.所以,当你使用--a的值a首先递减然后在表达式中使用.这不仅仅适用于Javascript,它通常用于大多数编程语言.

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

if (!(a - 1)) {
Run Code Online (Sandbox Code Playgroud)

  • @AlexanderSolonik这不仅仅是Javascript,大多数语言都是常见的. (3认同)
  • @AlexanderSolonik然后你必须澄清你的问题.这完全符合您在评论中提出的要求("无需更新a的实际值,只需检查--a是否为falsy") (3认同)