【发布时间】:2012-09-28 19:33:39
【问题描述】:
我有一个这样声明的“枚举”:
var PlaceType = {
PASSABLE_TERRAIN: 1,
IMPASSABLE_TERRAIN: 0,
SOMEWHAT_PASSABLE_TERRAIN: 2,
PATH: 3
};
还有一个这样声明的函数:
setPlaceType(placeType) {
this.clear = false;
this.placeType = placeType;
alert("before switch "+(PlaceType.SOMEWHAT_PASSABLE_TERRAIN==this.placeType));
switch(this.placeType) {
case PlaceType.PASSABLE_TERRAIN: {
alert("Case PASSABLE");
break;
}
case PlaceType.IMPASSABLE_TERRAIN: {
alert("Case IMPASSABLE");
break;
}
case PlaceType.SOMEWHAT_PASSABLE_TERRAIN: {
alert("Case SOMEWHAT_PASSABLE");
break;
}
case PlaceType.PATH: {
alert("Case PATH");
break;
}
default: {
alert("case default");
}
}
}
如果我这样称呼它:
setPlaceType(1);
我收到以下警报:“在 switch true 之前”、“case default”
如果我这样称呼它:
setPlaceType(2);
我收到以下警报:“在 switch false 之前”、“case default”
换句话说,该函数是使用正确的参数调用的,当做(在我看来是)与开关相同的比较但通过“==”时,我得到了正确的行为,但开关永远不会将值与适当的情况相匹配。有人知道为什么吗?
【问题讨论】:
-
它对我有用:jsfiddle.net/Y2KEn 你确定你正在传递一个 int 吗?
-
您是否通过调试器运行此程序以查看 Javascript 对 Case 块中比较值(或入站值)的运行时类型的看法?只是想知道它是否是一个微妙的强制问题? (在黑暗中拍摄)
-
您是否有机会从 HTML 页面调用它并传入输入文本框的 value 属性?那肯定会发送一个字符串...
标签: javascript enums switch-statement case