似乎我是javascript如果... Else工作奇怪

时间:2018-02-22 12:21:53

标签: javascript highmaps

我有声明,如果......其他。

$.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
            });
        };
    }); 

我在Overview.countryData中只有1个数据,但它第二次运行并且给出错误无法读取第5行中未定义的属性“值”。是什么原因可以说谁?

1 个答案:

答案 0 :(得分:1)

问题很简单。 Overview.countryData[index]的值未定义为indexif条件中的值为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在布尔上下文中始终被评估为stocks = ['aapl', 'nvda', 'amgn']。代码更加清晰。