为什么变量的值在 if 语句中改变
why does value of a variable change inside if statement
看看下面这段 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
有人能告诉我为什么当我没有明确地将 a 的值设置为 --a
时,a 的值是被操纵的吗?在代码中的 if 条件下,我真的不是说实际上会减少 a 的值,它只是我教过的 if 检查并会更改 a
的值。
好吧,我想我显然错了。我只是想知道,这只是 javascript 的事情还是所有编程语言都通用? (即能够在 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
是如何工作的!
--
是自减运算符。它会将变量的值减少一就地,正如您所经历的那样。
这是自减(--)运算符。
The decrement operator decrements (subtracts one from) its operand and returns a value.
--a 如何工作
--a
等价于a = a - 1
。因此,当您使用 --a
时,a
的值首先递减,然后在表达式中使用。这不仅是 Javascript 特有的,它对大多数编程语言都是通用的。
要检查减一的值是否为零,您可以使用
if (!(a - 1)) {
someNumber-- 将先读取变量值,然后从中减去 1。
--someNumber会先减1再读变量值
无论如何,它都会修改值。
--
和 ++
运算符是 'execution' 类型的运算符,它们正在调用中进行评估。
你应该使用这个语法:
if(!(a - 1)) {
console.log('ok');
}
是自减运算符。即使在条件表达式中,减后的变量值也会存储在内存中。
您应该尝试以下方法:
var a = 1;
var b = a - 1;
if (!(b)) {
console.log('ok');
}
console.log(a);
--a
是一个 表达式 ,它首先递减 a
,具有 new 的值a
.
的值
这适用于 C、C++、Java 和 Javascript。
如果你想检查 a - 1
是否会 为假,那么写 if (!(a - 1))
或者更清楚地写 if (a == 1)
。这些表达式中的任何一个都不会更改 a
.
的值
if 不仅是一个 条件语句 而且 执行写在其中的代码 即评估条件
例如 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 也将充当代码语句,之后它将充当条件语句,它将被执行并 return 值为 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);
看看下面这段 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
有人能告诉我为什么当我没有明确地将 a 的值设置为 --a
时,a 的值是被操纵的吗?在代码中的 if 条件下,我真的不是说实际上会减少 a 的值,它只是我教过的 if 检查并会更改 a
的值。
好吧,我想我显然错了。我只是想知道,这只是 javascript 的事情还是所有编程语言都通用? (即能够在 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
是如何工作的!
--
是自减运算符。它会将变量的值减少一就地,正如您所经历的那样。
这是自减(--)运算符。
The decrement operator decrements (subtracts one from) its operand and returns a value.
--a 如何工作
--a
等价于a = a - 1
。因此,当您使用 --a
时,a
的值首先递减,然后在表达式中使用。这不仅是 Javascript 特有的,它对大多数编程语言都是通用的。
要检查减一的值是否为零,您可以使用
if (!(a - 1)) {
someNumber-- 将先读取变量值,然后从中减去 1。
--someNumber会先减1再读变量值
无论如何,它都会修改值。
--
和 ++
运算符是 'execution' 类型的运算符,它们正在调用中进行评估。
你应该使用这个语法:
if(!(a - 1)) {
console.log('ok');
}
是自减运算符。即使在条件表达式中,减后的变量值也会存储在内存中。
您应该尝试以下方法:
var a = 1;
var b = a - 1;
if (!(b)) {
console.log('ok');
}
console.log(a);
--a
是一个 表达式 ,它首先递减 a
,具有 new 的值a
.
这适用于 C、C++、Java 和 Javascript。
如果你想检查 a - 1
是否会 为假,那么写 if (!(a - 1))
或者更清楚地写 if (a == 1)
。这些表达式中的任何一个都不会更改 a
.
if 不仅是一个 条件语句 而且 执行写在其中的代码 即评估条件
例如 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 也将充当代码语句,之后它将充当条件语句,它将被执行并 return 值为 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);