【问题标题】:issue with the simple if condition in javascript with stringjavascript中带有字符串的简单if条件问题
【发布时间】:2016-08-10 14:16:58
【问题描述】:

所以有些奇怪,下面是警报值:

  • consumerSupportEditableRole = true
  • superAdminRole = 假
  • combinedRole = 假

但奇怪的是,combinedRole 上的警报给了我 consumerSupport/ConsumerContact/GetEmailLog。因此,出于某种邪恶的原因进入 if 块。我希望它 转到 else 块,警报应该吐出 Implementation/Organization/GetEmailLog

var consumerSupportEditableRole = '@(Roles.IsUserInRole("Consumer Support Editable") ? "true" : "false")';
var superAdminRole = '@(Roles.IsUserInRole("Super Admin") ? "false" : "true")';
var combinedRole = consumerSupportEditableRole && superAdminRole
alert("consumerSupportEditableRole: " + consumerSupportEditableRole);
alert("superAdminRole: " + superAdminRole);
alert("superAdminRole && consumerSupportEditableRole: " + combinedRole);
if (combinedRole)
{
    var url = '@Url.Action("GetEmailLog", "ConsumerContact", new { Area = "ConsumerSupport" })';
}
else
{
    var url = '@Url.Action("GetEmailLog", "Organization", new { Area = "Implementation" })';
}

【问题讨论】:

  • 不要使用字符串来保存布尔值,你会很可爱。

标签: javascript if-statement logic


【解决方案1】:

去掉引号,你得到的不是 JS 中的布尔值,而是字符串

var consumerSupportEditableRole = @(Roles.IsUserInRole("Consumer Support Editable") ? "true" : "false");
var superAdminRole = @(Roles.IsUserInRole("Super Admin") ? "false" : "true");
var combinedRole = consumerSupportEditableRole && superAdminRole
alert("consumerSupportEditableRole: " + consumerSupportEditableRole);
alert("superAdminRole: " + superAdminRole);
alert("superAdminRole && consumerSupportEditableRole: " + combinedRole);
if (combinedRole)
{
    var url = '@Url.Action("GetEmailLog", "ConsumerContact", new { Area = "ConsumerSupport" })';
}
else
{
    var url = '@Url.Action("GetEmailLog", "Organization", new { Area = "Implementation" })';
}

【讨论】:

  • 'true'true 不同
  • @rpadovani - 他做到了,因为那是服务器端代码,不再在引号内输出,因此被删除。
  • @rpadovani 你不需要。好像是 C# 生成 JS 代码,在 C# 中 "true""false" 我猜是字符串,但 qoutes 不会打印,所以在 JS 中它变成布尔值。
【解决方案2】:

您将 consumerSupportEditableRolesuperAdminRole 设置为字符串,而不是布尔值。所以combinedRole其实是:

var combinedRole = "true" && "false";

这使它成为"false",即truthy

【讨论】:

    猜你喜欢
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 2012-02-12
    • 2011-06-11
    • 1970-01-01
    • 2011-10-25
    相关资源
    最近更新 更多