我正在尝试更改将数据写入表的条件。当我试图改变这个时,我注意到了一个奇怪的结果:看起来WriteToTable函数似乎无关紧要,如果我接受它的条件。为了测试这一点,我做了以下几点:
var TestThis=0;
if (TestThis=1000){
WriteToTable(iPlaceDisplayNum, place.name, place.rating, xScoreFinal, iProspect, place.url, place.formatted_phone_number);
alert ('This alert should not be displaying.');
}
该功能仍将执行,脚本运行时仍会显示警告。我不确定为什么?
这是函数的其余部分,问题出在底部:
function printme(place, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
if (typeof place.reviews !== 'undefined') {
var xScore = 0;
var xGlobal = 0;
for (var i = 0; i < place.reviews.length; i++) {
reviews = place.reviews[i];
for (var x = 0; x < reviews.aspects.length; x++) {
aspectr = reviews.aspects[x];
xScore += aspectr.rating;
xGlobal++;
}
}
var xScoreFinal = (xScore / xGlobal);
}
if (typeof xScoreFinal !== 'undefined') {
iPlaceDisplayNum++;
var iProspect;
if (xScoreFinal < 2.3) {
iProspect = 'Yes';
}
//Not sure what's going on here
var TestThis=0;
if (TestThis=1000){
WriteToTable(iPlaceDisplayNum, place.name, place.rating, xScoreFinal, iProspect, place.url, place.formatted_phone_number);
alert ('This alert should not be displaying.');
}
}
}
}
答案 0 :(得分:7)
您正在if条件检查中为变量赋值。您的TestThis
变量被赋值为1000,在被JavaScript转换为布尔值后将为真。这就是为什么你的功能总是被执行的原因。您可以详细了解自动类型转换here。
现在修复你的代码,改变这个 -
if (TestThis=1000)
到此 -
if (TestThis == 1000)
或者如果您不想进行自动类型转换 -
if (TestThis === 1000)
有时人们喜欢以下列方式反转比较中的值 -
if (1000 === TestThis)
这称为 Yoda Condition (是的,以Grand Jedi Master Yoda命名)。好处是,如果某人错误地只放置一个相等的,它将导致错误,因为您无法将任何内容分配给常量。我从未亲自使用它(也许永远不会,因为我发现它非常传统)。
答案 1 :(得分:4)
JavaScript允许您在条件中分配值,因此此TestThis=1000
结果为1000,在条件语句中,正数(实际上不是0)导致评估为真。
要使其成为有条件的,您应该TestThis===1000
(并且您应该几乎总是使用===
而==
作为===
强制实际比较两个并不试图将条件的一部分转换为另一部分。)
你也可以1000 === TestThis
(或者说1000 == TestThis
)有些人说这是错误的编码,因为它很难阅读。我将由你决定,但这绝对不允许你在条件中意外分配一个值,因为你不能将值赋值给1000.
答案 2 :(得分:3)
在if语句中,您将 TestThis
设置为1000
,而非将与<{1}}进行比较。 1000
运算符返回已设置的值,该值的计算结果为true,因为它不是=
,undefined
或0
。您只需使用null
运算符。
==
答案 3 :(得分:1)
if (TestThis == 1000)
像这样改变。
如果必须包含 ==
答案 4 :(得分:1)
变化:
if (TestThis=1000)
要:
if (TestThis==1000)
您实际上正在分配给TestThis,它将返回true并执行条件块。