为什么我的布尔值不能正确评估?
Why does my boolean not evaluate correctly?
所以,正如标题所说,我的布尔值计算不正确,这是我的代码:
var unindexed_frmVersionCtrl = $("#frmVersionCtrl").serializeArray();
unindexed_frmVersionCtrl[unindexed_frmVersionCtrl.length] = { name: "versionControl", value: 0 };
console.log(unindexed_frmVersionCtrl);
let historyEntry = false;
for (const [key, value] of Object.entries(unindexed_frmVersionCtrl)) {
if (value.name == "versionControlBool") {
historyEntry = value.value;
console.log(historyEntry);
}
if (value.name == "versionControl") {
console.log(historyEntry);
if (historyEntry == true) {
value.value = 1;
console.log("lel");
}
else {
console.log("false");
value.value = 0;
}
}
}
console.log(unindexed_frmVersionCtrl);
这是输出:
historyEntry 的计算结果为 true,即使它为 false。我不知道该怎么办。不知道。
我刚开始使用 javascript,我从来没有这么困惑过。谢谢
编辑:打字错误。
问题是你的 historyEntry = value.value;
,在这种情况下 value.value 是一个字符串,而不是布尔值。
你可以做到historyEntry = (value.value == 'true');
演示
var unindexed_frmVersionCtrl = [{
"name": 'versionControlBool',
value: 'true'
}, {
"name": 'versionCount',
value: '25'
}, {
"name": 'versionControl',
value: 0
}]
var historyEntry = false;
for (const [key, value] of Object.entries(unindexed_frmVersionCtrl)) {
if (value.name == "versionControlBool") {
historyEntry = (value.value == 'true');
console.log("typeof value.value = " + typeof(value.value))
console.log(historyEntry);
}
if (value.name == "versionControl") {
console.log(historyEntry);
if (historyEntry == true) {
value.value = 1;
console.log("lel");
} else {
console.log("false");
value.value = 0;
}
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
'versionControlBool'
的值是字符串 'true'
而不是布尔值 true
。如果你尝试 'true' == true
你会得到 false
但如果你 console.log('true')
控制台将记录 true
就好像它是一个布尔值所以你不会注意到。这里有一些代码可以试用。
var x = true;
var y = 'true';
console.log(x, 'This is the boolean true');
console.log(y, 'This is a string "true"');
console.log(x == true, 'This should be true');
console.log(y == true, 'This will be false even though the console thinks it\'s a boolean');
console.log(y == 'true', 'Whereas this will be true, as it should');
所以,正如标题所说,我的布尔值计算不正确,这是我的代码:
var unindexed_frmVersionCtrl = $("#frmVersionCtrl").serializeArray();
unindexed_frmVersionCtrl[unindexed_frmVersionCtrl.length] = { name: "versionControl", value: 0 };
console.log(unindexed_frmVersionCtrl);
let historyEntry = false;
for (const [key, value] of Object.entries(unindexed_frmVersionCtrl)) {
if (value.name == "versionControlBool") {
historyEntry = value.value;
console.log(historyEntry);
}
if (value.name == "versionControl") {
console.log(historyEntry);
if (historyEntry == true) {
value.value = 1;
console.log("lel");
}
else {
console.log("false");
value.value = 0;
}
}
}
console.log(unindexed_frmVersionCtrl);
这是输出:
historyEntry 的计算结果为 true,即使它为 false。我不知道该怎么办。不知道。 我刚开始使用 javascript,我从来没有这么困惑过。谢谢
编辑:打字错误。
问题是你的 historyEntry = value.value;
,在这种情况下 value.value 是一个字符串,而不是布尔值。
你可以做到historyEntry = (value.value == 'true');
演示
var unindexed_frmVersionCtrl = [{
"name": 'versionControlBool',
value: 'true'
}, {
"name": 'versionCount',
value: '25'
}, {
"name": 'versionControl',
value: 0
}]
var historyEntry = false;
for (const [key, value] of Object.entries(unindexed_frmVersionCtrl)) {
if (value.name == "versionControlBool") {
historyEntry = (value.value == 'true');
console.log("typeof value.value = " + typeof(value.value))
console.log(historyEntry);
}
if (value.name == "versionControl") {
console.log(historyEntry);
if (historyEntry == true) {
value.value = 1;
console.log("lel");
} else {
console.log("false");
value.value = 0;
}
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
'versionControlBool'
的值是字符串 'true'
而不是布尔值 true
。如果你尝试 'true' == true
你会得到 false
但如果你 console.log('true')
控制台将记录 true
就好像它是一个布尔值所以你不会注意到。这里有一些代码可以试用。
var x = true;
var y = 'true';
console.log(x, 'This is the boolean true');
console.log(y, 'This is a string "true"');
console.log(x == true, 'This should be true');
console.log(y == true, 'This will be false even though the console thinks it\'s a boolean');
console.log(y == 'true', 'Whereas this will be true, as it should');