我在单击按钮时保存了一条记录,但始终会引发错误。
我包括一个if else条件。我已经超过了所有条件,但我的代码仍将转到if条件,但不应转到if条件。
代码是-
我的this.state.question.options值为-
[
{
id:3250,
label:'good answer',
assert:1
position:1
},
{
id:3249,
label:'bad answer',
assert:0
position:2
}
]
我正在检查其他条件是否为-
if (this.state.question.options.filter(o => o.assert === true).length <= 0) {
hasError = true
errorKey = 'add-question-modal-missing-assert-options'
}
else {
alert("test");
}
我的代码应该转到其他部分,并将测试打印为警报,但是如果有部分并显示错误,则将进行检查。为什么?
我想展示其他部分,即测试为警报
答案 0 :(得分:2)
在比较2个不同值时,您正在使用严格比较运算符(===)。在您的示例中,将1解析为整数,而将true解析为布尔值。严格的比较运算符用于检查相等值和相等类型上的2个值。
要解决代码中的错误,请使用松散比较(==)或使用!!1
将整数转换为布尔值
答案 1 :(得分:0)
if (this.state.question.options.filter((el) => {return !!el.assert}).length <= 0) {
hasError = true
errorKey = 'add-question-modal-missing-assert-options'
}
else {
alert("test");
}
答案 2 :(得分:0)
this.state.question.options的值为-
[
{
id:3250,
label:'good answer',
assert:1,
position:1
},
{
id:3249,
label:'bad answer',
assert:0,
position:2
}
]
然后
if (this.state.question.options.filter(o => o.assert == true)).length <= 0) {
hasError = true
errorKey = 'add-question-modal-missing-assert-options'
} else {
alert("test");
}
将===
严格类型替换为==
答案 3 :(得分:0)
在JavaScript中,1
不严格等于true
。但是,使用严格的相等运算符===
是个好习惯。
您应该将o.assert
与实际可能的值o.assert === 1
进行比较。
在可读性方面,我还将考虑将长度与1而不是0进行比较:
this.state.question.options.filter(option => option.assert === 1).length < 1
答案 4 :(得分:0)
您是否需要这种代码
if (this.state.question.options.length <= 0) {
assert = true;
hasError = true;
errorKey = 'add-question-modal-missing-assert-options'
}
else {
alert("test");
}