奇怪的Javascript如果声明

时间:2014-05-27 20:51:14

标签: javascript asp.net-mvc-4

我不确定我的if语句有什么问题。我试图在我的javascript中使用我的模型。

if (@Model !== null)
{
    if (@Model.Level !== null)
    {
        //use @Model.Level
    }
}
else
{
    //use default
}

Model是null,但它仍然进入第一个if语句(显然是第二个断开)。我已经尝试了@Model!@Model!=,但它仍然会介入。

我做错了什么? (它在!==下也有一条波浪形的红线,表示存在语法错误)

4 个答案:

答案 0 :(得分:2)

三重方程在JavaScript中没有类型转换。在您的情况下,您可能会得到一个未定义的对象,该对象不是空值。

例如:

undefined === null //Do not cast when comparing, increased performance.
false
undefined == null //Do cast when comparing, decreased performance.
true

此外,如果@Model值为null,那么您将无法在客户端看到空值。它给你一个像这样的空值:

if( == null)
{
}

这会导致您的javascript端出错。空检查应在服务器端完成。因此,您必须将@值放在代码前面以使其成为服务器端:

<script>
    @if (Model != null) //Server side code.
        { 
            if (Model.Level != null) //still server side code.
            {

                 <text>
                   alert("your javascript here"); //write javascript on your screen.
                 </text>  
            }
        }
</script>

答案 1 :(得分:0)

为了检查javascript中是否为null或未定义,请使用if(@model)而不是if(@model!== null) http://appendto.com/2010/10/how-good-c-habits-can-encourage-bad-javascript-habits-part-2/

答案 2 :(得分:0)

它进入if语句的原因是因为它的计算结果为true,所以在这里找不到任何奇怪的东西。您的浏览器不是气质。有关列表比较,请查看此http://dorey.github.io/JavaScript-Equality-Table/

另请注意,double和triple =之间存在差异。三人将输入

答案 3 :(得分:0)

此代码看起来很像Razor然后是Javascript,尽管你可能试图将它们中的两个混合在一起。

您的选择:

1)使用以下内容将Model转换为JavaScript对象:
      Turn C# object into a JSON string in .NET 4

2)使用Razor if语句并用它写出最终的JavaScript。

<script>
  // Code assume this is an numeric value
  var useThisVariable;
</script>

if (@Model !== null)
{
    if (@Model.Level !== null)
    {
    <script>
      useThisVariable = @Model.Level;
    </script>

    }
}
else
{
    <script>
      useThisVariable = -1;
    </script>
}