【问题标题】:if statement syntax clarification [closed]if语句语法说明[关闭]
【发布时间】:2016-10-22 05:15:35
【问题描述】:
<html>
<head>
<title>Beast Mode ON</title>

<style>

</style>
</head>
<body>

<script type = "text/javascript">
var name = prompt("Please enter your name: ");
if (name == null || name == "") name = " visitor "
{document.write("Hi " + name + " welcome to javascript.");}
 </script>

</body>
</html>

此代码可以正常工作。我想提出的问题是为什么?因为“if”语句仅在满足括号中的条件时才执行花括号中的代码。但是如果我尝试加入括号,例如

if ((name == null || name == "") name = " visitor ")

代码停止工作。什么原因?

【问题讨论】:

  • 花括号里的代码always runs.你觉得if((name == null | name == "") name = " visitor ")应该怎么做?基本上,这就像写if ((true)name = "visitor")。它在语法上无效,不表示块,并暗示您可以执行(true)name 之类的操作并期待结果。

标签: javascript html


【解决方案1】:

if的一般结构是:

if (condition) thingToDo

condition 表达式为真时,它会执行thingToDo 中的代码。 (我故意省略了可选的else 子句,因为它与这个问题无关。)

所以在你的第一个代码块中,conditionname == null || name == ""thingToDoname = " visitor "。因此,如果用户输入空名称以响应提示,它会将名称设置为 " visitor "

如果thingToDo 包含多个语句,则必须将它们包裹在花括号中以使其成为代码块。但如果它只是一个语句,大括号是可选的(虽然我推荐它们,请参阅Why is it considered a bad practice to omit curly braces?)。 document.write() 调用周围的大括号无关紧要,因为它在 if 语句之外。

您的第二次尝试是错误的,因为您已将条件更改为:

(name == null || name == "") name = " visitor "

这不是一个有效的表达式——你已经在条件中移动了赋值,但是没有操作符将它与比较连接起来。

【讨论】:

    【解决方案2】:
    if (name == null || name == "") name = " visitor "
    {document.write("Hi " + name + " welcome to javascript.");}
    

    这是不正确的语法。

    它在说(和做)的是这样的:

    if (name == null || name == "") {
          name = "visitor";
       }
    document.write("Hi " + name + " welcome to javascript.");
    

    name = "visitor" 不是条件。这是一个任务。

    在您的代码中,document.write... 周围的大括号是无用的,并且对 if 语句没有任何作用。

    您不必在单行 if 语句周围使用大括号,但正确的写法是:

    if (name == null || name == "") 
        name = "visitor";
    document.write("Hi " + name + " welcome to javascript.");
    

    只有在条件之后执行的代码只有一行时,上述方法才有效。任何其他代码都在 if 之外执行。

    【讨论】:

      【解决方案3】:

      因为语法不正确

      if ((name == null || name == "") name = " visitor ")"
      

      如果没有正确关闭

      应该是这样的

      if((name==null||name=="")) name="visitor";
      

      希望对你有帮助

      【讨论】:

      • 你在他的代码中哪里看到了")"
      • @Barmar 这只是一个错字。
      • @Barmar 忘记最后一个双引号就可以了。
      • @AmericanPatriot 但是也没有最后一个)。问题只是说name = " visitor ",这不是语法错误。
      • 哦,现在我明白了。他的问题不是关于代码块中的代码,而是关于文本中的不同代码,它没有突出显示,所以我可以看到它。
      【解决方案4】:

      我有 3 条建议

      1. 正确的代码是

      <script type = "text/javascript">
          var name = prompt("Please enter your name: ");
          if (name == null || name == "") 
          {
              name = 'visitor';
          }
          document.write("Hi " + name + " welcome to javascript.");
      </script>
      
      1. 请在 javascript 中使用单引号而不是双引号。
      2. 最好使用库来检查变量的所有错误情况。因为它也可能是未定义的。这也使它更容易阅读。您可以使用库 lodash 并编写 if(_.isString(name))

      【讨论】:

      • 为什么使用单引号而不是双引号?这只是个人风格,没有理由偏爱。
      • 你已经破坏了功能。 if 的想法是当用户没有输入任何内容时,看看他们是否应该将name 更改为" visitor "。无论他们是否输入任何内容,都应该写出消息。
      • 谢谢...我明白了。但我的好奇心是关于访问者部分..括号中的条件是如何产生的?
      • 如果您打算混合使用 javascript 和 html,使用不同类型的引号会更容易。
      • 我完全不同意这种说法,我已经在这个行业工作了很多年。
      猜你喜欢
      • 1970-01-01
      • 2015-05-21
      • 1970-01-01
      • 1970-01-01
      • 2018-02-22
      • 1970-01-01
      • 2017-09-05
      • 2012-12-20
      • 1970-01-01
      相关资源
      最近更新 更多