如果声明无法正常工作

时间:2013-08-30 18:43:48

标签: javascript

我正在尝试更改将数据写入表的条件。当我试图改变这个时,我注意到了一个奇怪的结果:看起来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.');
        }

        }
    }
}

5 个答案:

答案 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,因为它不是=undefined0。您只需使用null运算符。

==

答案 3 :(得分:1)

if (TestThis == 1000)

像这样改变。

如果必须包含 ==

,则用于比较相等性

答案 4 :(得分:1)

变化:

if (TestThis=1000)

要:

if (TestThis==1000)

您实际上正在分配给TestThis,它将返回true并执行条件块。