javascript为什么条件语句中的增量运算符给出类对象的编译错误?
条件语句中的增量运算符在与类对象一起使用时出现编译错误
下面的语句没有错误:
a = a==0 ? 1 : ++a;
但是,此语句给出编译错误:
obj.setValue(obj.getValue()==0 ? 1 : ++obj.getValue());
你可以在下面搜索框中键入要查询的问题!
条件语句中的增量运算符在与类对象一起使用时出现编译错误
下面的语句没有错误:
a = a==0 ? 1 : ++a;
但是,此语句给出编译错误:
obj.setValue(obj.getValue()==0 ? 1 : ++obj.getValue());
# 1 楼答案
obj.getValue()
是方法返回的值。这不是一个变量。因此,不能应用任何更改操作数值的运算符(例如--、++、+=、=,等等)你可以使用:
相反
或者,可以将方法的返回值指定给变量,该变量可以递减:
但是,没有理由使用预减量(或后减量)运算符,除非以后要使用减量变量
# 2 楼答案
++
和--
运算符只能与可以出现在赋值(=
)左侧的表达式一起使用。不能将函数调用放在赋值的左侧,因此不能将++
应用于函数调用我所说的那种表达的正式术语是l-value。这是有效的:
因为
x
作为一个表达式是一个l值。这也适用于:因为
x.a
也是一个有效的l值现在还应该指出,从技术上讲,是一种将函数调用用作l值的方法:
因为
value
是用getter/setter对定义的,所以子表达式++obj.value
将通过调用getter函数obj.value
,递增返回值,然后调用setter函数来计算。当然,这并不能真正“反驳”一般规则,因为使用getter/setter函数的全部目的是允许简单的属性访问语法,同时涉及添加特殊语义的代码# 3 楼答案
因为obj。getValue()是一个方法/函数
不能自动递增函数的返回值(必须先将其分配给变量,自动递增将应用于该变量)
# 4 楼答案
正如其他答案所提到的,这是因为
++
和--
运算符不能应用于函数但是再看看你的代码,为什么要检查
obj.getValue()==0
如果值为0,则只需像任何其他数字一样递增
obj.setValue(obj.getValue() + 1);
# 5 楼答案
为什么会出现这种情况?您可以获取一个默认值,然后添加一个
# 6 楼答案
不能使用++增加方法返回的“值”
使用
而不是