我看来javaScript如果.. else工作奇怪



我有语句,如果... else。

$.each(mapGeoJSON.features, function (index, feature) {
        if((Overview.countryData[index])!='undefined'){
            data.push({
                key: feature.properties['hc-key'],
                value: Overview.countryData[index].value
            });
        }else{
            data.push({
                key: feature.properties['hc-key'],
                value: 0
            });
        };
    }); 

我在概述中只有1个数据。

问题非常简单。Overview.countryData[index]未针对index的值定义,其在if条件下的值为undefined

,但 undefined'undefined'不一样。

undefined是对象或数组中缺少密钥的值,即是否设置或尚未设置的变量的值。

'undefined'是字符串文字。

无论您如何比较它们(使用=====(,undefined'undefined'永远都不相等。
因此,if条件始终是true,并且总是采用。但是if分支中的代码假定存在Overview.countryData[index](定义为undefined(。

正确的测试条件是:

if (Overview.countryData[index] != undefined)

您也可以使用:

if (Overview.countryData[index])

因为在布尔上下文中,始终将undefined评估为false。代码更清楚。