请看下面这个小片段:
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
的值。
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
如何工作!
答案 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
的值。