所以我有一个函数来检查字符串中的最后一个字符是否是算术运算符(+, - ,*,/),如果是,它应该立即从函数返回。如果不是,则减去符号应附加到字符串。但是,只有第二种情况似乎正在发生,我无法弄清楚原因。如果有人能提供一些见解,我将非常感激。
$("#subtract").click(function () {
var original=$("#display").text();
var sliced=original.slice(0,original.length - 1);
var signs=["+","-","*","/"];
var charpos=sliced.charAt(sliced.length -1);
if ((charpos === signs[0]) || (charpos === signs[1]) || (charpos === signs[2]) || (charpos === signs[3])) {
return;
}
else {
var newdisplay=sliced + "-";
$("#display").text(newdisplay);
}
});
答案 0 :(得分:0)
var original=$("#display").text();
var sliced=original.slice(0,original.length - 1);
第二行删除了字符串中的最后一个字符。所以你甚至无法检查那是什么。只是摆脱它并将第一行改为
var sliced=$("#display").text();
一切都应该正常
答案 1 :(得分:0)
而不是
if ((charpos === signs[0]) || (charpos === signs[1]) || (charpos === signs[2]) || (charpos === signs[3])) {
return;
}
试
if ($.inArray(charpos, signs) > -1) {
return;
}
首先,永远不要以这种方式枚举数组中的项目 - 这样很容易错过项目。其次,精确的实例比较(===)不会触发,除非你比较完全相同的字符串。
此外,请考虑修改如何提取最后一个字符。
答案 2 :(得分:0)
您正在切换正在删除最后一个字符的输入,然后使用charAt
并获取倒数第二个字符。
var original=$("#display").text(); // "foobar"
var sliced=original.slice(0,original.length - 1); // "fooba"
var charpos=sliced.charAt(sliced.length -1); // "a" -- we lost the "r"
您只需致电charAt
并使用最后一个字符(或者,如果您愿意slice
,则可以接受负数并回溯字符串)。
其次,由于signs
是一个数组,因此您可以使用indexOf
来检查每个元素。 e.g。
var original = $('#display').text();
var signs = ["+","-","*","/"];
var lastChar = original.slice(-1); // OR original.charAt(original.length - 1);
// Check for the lastChar in the signs array
if (signs.indexOf(lastChar) != -1){ // -1 == not found
return; // short exit
}