【问题标题】:js doesn't execute 'else' statementjs 不执行 'else' 语句
【发布时间】:2019-05-30 17:21:37
【问题描述】:

我在 JavaScript 中有一个 if-else 语句,它返回 false,但不执行 'else' 中的代码。

cshtml文件中的部分脚本:

if (@Session["mission"].ToString() != "1") {
    setInterval(function () { myTimer(ctxPoints, ctxLines); }, 1000 / @ViewBag.rate);  
} else {
    alert("hi");
}

在调试中,'@Session["mission"].ToString() != "1"' 语句返回 false,但没有任何内容跳转到屏幕。

【问题讨论】:

  • 什么是@Session["mission"].ToString()?你的意思是toString
  • 请显示@Session["mission"].ToString()的结果。
  • 看起来像 Razor C# 语法,所以它是 C# .ToString() 大写,但你应该检查 @Session["mission"].ToString() 的值以确保它是你所期望的
  • 您可能需要在 if else 语句之前对 @Session["mission"] 进行空值检查,以确保它不为空
  • 它不为空.. '@Session["mission"].ToString()' 返回 "2" (字符串类型)和 '@Session["mission"].ToString() == "1"' 返回 false(bool 类型)

标签: javascript c# asp.net-mvc


【解决方案1】:

您应该打开您的网络浏览器开发者控制台并查看到达浏览器的真实脚本。

Razor 部分,@Session["mission"].ToString() 不存在于浏览器脚本中,因为它们在发送到浏览器之前在服务器中进行了评估。所以在控制台中尝试@Session["mission"].ToString() != "1"这个是没有意义的。在浏览器中,你会得到类似的东西: if (1 != "1") 甚至喜欢 if ( != "1") 这会引发错误。

JavaScript 会合并,因此当您使用比较器 ==!= 时,1 等于 "1",因此您不需要在值周围包含 qoutes(除非您收到提到的错误上面:在这种情况下,如果你包含引号,你会得到if ("" != "1"))。

使用!===== 可以避免合并,这会认为1 不等于"1",因此,在这种情况下,包括引号没有任何区别。

【讨论】:

    【解决方案2】:

    我觉得你应该清除Js代码和c#代码

    if ("@Session["mission"].ToString()" != "1")
    

    Session["mission"].ToString()这个打印字符串在c#中,但是你需要把它封装在引号中,使这个值得到string的类型

    【讨论】:

    • 嗯,即使是if (1 != "1") 而不是if ("1" != "1"),我也看不出这怎么会是个问题,我猜里面的引号可能需要转义
    • @slai 你是对的,我的回答只是帮助他获得更安全的代码。问题必须与另一个代码问题有关
    • 投了反对票,因为第一条评论是正确的。如果你想解释如何编写“更安全的代码”,你应该提到!=!=======之间的区别
    • @JotaBe 是的,我赞成你的回答,因为它足够详细
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多