0

我正在编写一个脚本,该脚本使用基于部分链接的数组中的元素为页面上的内容添加标签......所以我的数组看起来像这样:

var componentList[9] = "Sunnyseed"
var componentList[10] = "Echoberry"
var componentList[11] = "Riverstone"
var componentList[13] = "Auraglass"
var componentList[14] = "Skypollen"

您会注意到没有“12”...当数组项不存在时,我希望标签为“未知”。现在,我不能完全测试我的解决方案,因为我不能让目标页面给我一个 12 ......所以我希望有人会告诉我这是否会做我想要的......

 var component = ""

 if(typeof componentList[critterIDval] == 'undefined'){
 component="Unknown"
 }

else{

 component=componentList[critterIDval]
}

这显然不是完整的脚本,但它应该是重要的东西......我只是想知道当 critterIDval 为 12 时这是否会使其显示“未知” - 因为可能需要数年时间才能遇到测试情况.

4

3 回答 3

1

看起来不错。

虽然如果您确定该值永远不会是空字符串(如componentList[14] = '';),那么您可以尝试

var component = componentList[critterIDval] || 'Unknown'
于 2013-11-13T03:30:05.950 回答
1

你几乎在那里。您在比较中使用了单等号,所以这会搞砸,我不确定您是否可以创建这样的 JS 数组,但除此之外,您很好。

这是我为它运行的测试:

var componentList = [];
componentList[9] = "Sunnyseed";
componentList[10] = "Echoberry";
componentList[11] = "Riverstone";
componentList[13] = "Auraglass";
componentList[14] = "Skypollen";

for (var critterIDval = 9; critterIDval < 15; critterIDval++) {
    if (typeof componentList[critterIDval] == 'undefined') { // double equals here
        component = "Unknown";
    } else {
        component = componentList[critterIDval];
    }
    console.log(component);
}
于 2013-11-13T03:33:42.540 回答
1

当数组项不存在时,我希望标签为“未知”。

typeof运算符不会告诉您属性是否存在,因为它在属性不存在时返回undefined 而且当它确实存在并且已分配值undefined或仅创建但尚未分配值时返回。

有两种主要的方法来测试属性的存在:in操作符,它也在[[Prototype]]链上查找,以及hasOwnProperty所有对象的方法。所以

if (componentList.hasOwnProperty(critterIDval)) {
  component = "Unknown"

} else {
  component = componentList[critterIDval]
}

你也可以写成:

component = componentList.hasOwnProperty(critterIDval)? componentList[critterIDval] : 'unknown';

PS。还有其他方法,例如查看Object.keys(componentList)and componentList.propertyIsEnumerable(critterIDval),但以上是最常见的。

编辑

如果您的要求不仅是测试属性是否存在,而且还要测试“真实”值,那么:

if (componentList[critterIDval])

可能就足够了,如果值为''(空字符串)0、、、、或。falseNaNundefinednull

也许只测试一个非空字符串或数字就可以了:

if (/.+/.test(componentList[critterIDval]))

但返回true,依此类推NaNnull因此,您需要指定实际测试的内容,否则某些值可能会得到不希望的结果。

于 2013-11-13T03:46:24.250 回答