Javascript 为什么条件语句中的增量运算符给出类对象的编译错误?
条件语句中的增量运算符在与类对象一起使用时出现编译错误 下面的语句没有错误:Javascript 为什么条件语句中的增量运算符给出类对象的编译错误?,javascript,java,Javascript,Java,条件语句中的增量运算符在与类对象一起使用时出现编译错误 下面的语句没有错误: a = a==0 ? 1 : ++a; 但是,此语句给出编译错误: obj.setValue(obj.getValue()==0 ? 1 : ++obj.getValue()); ++和-运算符只能与可以出现在赋值=(assignment=)左侧的表达式一起使用。不能将函数调用放在赋值的左侧,因此不能将++应用于函数调用 我所说的这类表达式的一个正式术语是l值。这项工作: var x = 0; x++; 因为x作
a = a==0 ? 1 : ++a;
但是,此语句给出编译错误:
obj.setValue(obj.getValue()==0 ? 1 : ++obj.getValue());
++和-运算符只能与可以出现在赋值=(assignment=)左侧的表达式一起使用。不能将函数调用放在赋值的左侧,因此不能将++应用于函数调用
我所说的这类表达式的一个正式术语是l值。这项工作:
var x = 0;
x++;
因为x作为一个表达式是一个l值。这也适用于:
var x = { a: 0 };
x.a++;
因为x.a也是一个有效的l值
现在还应该指出,从技术上讲,有一种方法可以将函数调用用作l值:
因为value是用getter/setter对定义的,所以子表达式++obj.value将通过调用getter函数obj.value、递增返回值,然后调用setter函数来计算。当然,这并不真正否定一般规则,因为使用getter/setter函数的全部目的是允许简单的属性访问语法,同时涉及添加特殊语义的代码。obj.getValue是由方法返回的值。这不是一个变量。因此,您不能应用任何更改操作数值的运算符,例如-、++、+=、=,等等
您可以使用:
obj.setValue(obj.getValue()==0 ? 1 : obj.getValue() + 1);
相反
或者,您可以将方法的返回值指定给变量,该变量可以递减:
int a = obj.getValue();
obj.setValue(a==0 ? 1 : ++a);
但是,没有理由使用预减量或后减量运算符,除非以后要使用减量变量。因为obj.getValue是一个方法/函数
不能自动递增函数的返回值必须首先将其分配给变量,并且自动递增将应用于该变量为什么会出现这种情况?您可以获取一个默认值,然后添加一个
obj.setValue((obj.getValue() || 0) + 1);
不能使用++增加方法返回的值 使用 而不是
++obj.getValue()
正如其他答案所提到的,这是因为++和-运算符不能应用于函数 但是再看一下代码,为什么要检查obj.getValue==0 如果该值为0,则只需像任何其他数字一样递增
obj.setValueobj.getValue+1 您需要选择Java或JavaScript。两个标签都有会让人困惑,并且容易引发人们的注意。++obj.getValue是罪魁祸首,你不能在方法上使用++运算符。如果obj.getValue==0,obj.getValue的结果是什么?@Nina Scholz没有结果,因为代码在执行之前给出了编译错误。我认为这不会编译,因为逻辑OR不适用于Java中的int。它是javascript标记的。。。也在js中,如果obj.getValue返回一个值或一个数字,它应该可以工作,但是谁知道呢……我认为js标记是不正确的。OP提到编译错误表明这是Java,我认为这是解决OP问题的最好办法。
obj.getValue() + 1
++obj.getValue()