奇怪的Javascript If语句

Weird Javascript If Statement

本文关键字:If 语句 Javascript      更新时间:2023-09-26

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

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

Model为null,但它仍然会进入第一个if语句(显然在第二个语句时中断)。我试过@Model, !@Model!=,但它仍然总是介入。

我做错了什么?(!==下面也有弯弯曲曲的红线,表示有语法错误)

三元方程在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端出现错误。空检查应该在服务器端完成。因此,你必须在代码前面加上@ value,使其成为服务器端:

<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>

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

它进入if语句的原因是因为它的计算结果为true,这里没有发现任何奇怪之处。你的浏览器不是喜怒无常的。要查看列表比较,请查看http://dorey.github.io/JavaScript-Equality-Table/

还要注意double和triple =之间的区别。

这段代码看起来很像Razor然后是Javascript,尽管你可能会尝试将两者混合在一起。

你的选择:

1)使用如下代码将Model转换为JavaScript对象:
在。net 4中将c#对象转换为JSON字符串

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>
}