【问题标题】:How to successfully break out of function in javascript?如何成功突破javascript中的功能?
【发布时间】:2015-11-14 12:26:24
【问题描述】:

所以我有一个函数来检查字符串中的最后一个字符是否是算术运算符(+、-、*、/),如果是,它应该立即从函数中返回。如果不是,则应将减号附加到字符串中。但是,似乎只有第二种情况正在发生,我不知道为什么。如果有人能提供一些见解,我将非常感激。

    $("#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);
        }

     });

【问题讨论】:

  • 看起来你得到了original 的倒数第二个字符,因为你切掉了sliced 中的最后一个字符,并用charpos 得到了sliced 的最后一个字符.这是故意的吗?如果是这样,那么我看不出有什么问题,那么您能否提供一个示例,说明您在$("#display") 中输入的内容,以便我进一步测试?
  • 您是否在控制台中打印它们并查看是否正确获取字符? console.log()
  • original.slice(0, original.length - 1) 更改为original.slice(0, original.length)

标签: javascript jquery string return


【解决方案1】:

您正在对删除最后一个字符的输入进行切片,然后使用 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 来检查每个元素。例如

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
}

【讨论】:

  • 感谢 indexOf 技术快速扫描数组。我忘记了在检查之前我实际上是在 #display 附加了一个附加值,但我现在修复了它。谢谢!
【解决方案2】:
var original=$("#display").text();
var sliced=original.slice(0,original.length - 1);

第二行去掉了字符串中的最后一个字符。所以你甚至无法检查那是什么。只需摆脱它并将第一行更改为

var sliced=$("#display").text();

一切正常

【讨论】:

    【解决方案3】:

    而不是

    if ((charpos === signs[0]) || (charpos === signs[1]) ||  (charpos  === signs[2]) || (charpos === signs[3])) {
            return;
        }
    

    试试

    if ($.inArray(charpos, signs) > -1) {
        return;
    }
    

    首先,永远不要以这种方式从数组中枚举项目——这样很容易错过项目。其次,确切的实例比较 (===) 不会触发,除非您比较完全相同的字符串。

    此外,考虑修改提取最后一个字符的方式。

    【讨论】:

      猜你喜欢
      • 2016-02-26
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-21
      • 1970-01-01
      • 2012-08-04
      相关资源
      最近更新 更多