全国协议5人面授小班,企业级独立开发考核,零基础的软硬件工程师基地

当前位置:首页  >  JavaScript 入门教程1  > 
admin-更新于 2024-10-15

1. 基本语法

if 语句的最基本语法如下:

// 方式1if (条件) {
  // 条件满足做的事情;}// 方式2if (条件) 条件满足时候做的事情;
代码块
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

通常方式2的使用场景是在条件满足时只会写一行代码的情况,有些代码压缩工具可能会将多个语句配合逗号表达式压缩成方式2。

这是 if 语句两种最基本语法。

第一种方式用到的相对较多,当条件满足的时候,就会执行大括号内的代码,第二种方式则会在条件满足的时候执行括号后面到行尾的语句。

条件满足的情况其实就是条件的执行结果不为false或者不能被隐式转为false的情况。

var score = 99;if (score > 60) {
  console.log('及格了'); // 输出:"及格了"}if (score > 90) {
  console.log('优秀!'); // 输出:"优秀!"}
代码块
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

>符号就是判断左边的数是否大于右边,如果左边大于右边则会返回 true,否则返回 false

这里两个 if 语句的条件都是满足的,所以会输出及格了优秀!

方式二在简单函数中很常见

// 计算圆面积function calcArea(r) {
  if (!r) return 0;

  return r * r * 3.14;}
代码块
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这里判断了 r 是否有传入,如果没有传入则直接返回了 0。

2. 分支

if 语句可以仅有单个分支也可以有多个分支。

// 单个分支if (条件1) {
  // 条件1满足的时候执行的代码} else {
  // 条件1不满足的时候执行的代码}// 多个分支if (条件1) {
  // 条件1满足的时候执行的代码} else if (条件2) {
  // 条件2满足的时候执行的代码} else if (条件3) {
  // 条件3满足的时候执行的代码} else {
  // 条件1、条件2、条件3都不满足的时候执行}
代码块
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

单个分支的方式比较常用:

var score = 77;if (score >= 60) {
  console.log('及格了');} else {
  console.log('不及格');}// 输出:"及格了"
代码块
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

>=则表示左边的值如果大于等于右边的值,则返回 true 否则返回 false

通过这样的分支,就可以扩展条件的场景。

多个分支的场景也非常用到,如需要判断成绩的不同区间给出不同的标准:

var score = 88;if (score < 60) {
  console.log('不及格');} else if (score < 80) {
  console.log('良好');} else if (score < 90) {
  console.log('优秀!');} else {
  // 剩下的肯定是大于等于九十的情况
  console.log('太强了!');}// 输出:"优秀!"
代码块
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在多个分支的情况下,else 也可以不提供。

var score = 0;if (score < 60) {
  console.log('不及格');} else if (score < 80) {
  console.log('良好');} else if (score < 90) {
  console.log('优秀!');} else if (score <= 100) {
  console.log('太强了!');}// 输出:不及格
代码块
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

3. 例子

注意:例子的解法不止一种,可以自己发散实现

3.1 判断一个数是不是偶数

var num = 77;if (num % 2 === 0) {
  console.log(num + '是一个偶数');} else {
  console.log(num + '是一个奇数');}// 输出:77是一个奇数
代码块
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

这里就是通过将数字对 2 进行取余数操作,如果余数是 0 则说明一个数是偶数,否则就是奇数。

3.2 计算成人的标准体重

var sex = '男';var height = 178;var offset = 0;if (sex === '男') {
  offset = 105;} else {
  offset = 100;}var weight = height - offset;console.log('身高为' + height + 'cm的' + sex + '性标准体重为' + weight + 'KG');// 输出:身高为178cm的男性标准体重为73KG
代码块
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

首先要知道标准体重的计算公式:

  • 男:身高(cm)-105 = 标准体重(kg)
  • 女:身高(cm)-100 = 标准体重(kg)

可以看到男生需要身高减去一个 105 的偏移量,女生需要减去 100 的偏移量,所以要判断性别决定这个值。

每个人的身高是不一样的,所以作为变量。

所以只需要根据性别判断是减去 105 还是减去 100,最后计算出结果即可。

4. 小结

if 语句很简单,但是非常常用和重要,高级语言如果失去了条件语句,又没有其他的替代品,基本就失去了活力。

使用if语句的时候也需要注意,碰到冗长的条件尽量思考一下是不是有更好的解决方案,防止代码可读性和可维护性变差。


FreeMarker template error (DEBUG mode; use RETHROW in production!): Template inclusion failed (for parameter value "footer.ftl"): Template not found for name "home/footer.ftl". The name was interpreted by this TemplateLoader: MultiTemplateLoader(loader1 = org.springframework.ui.freemarker.SpringTemplateLoader@303dbb92, loader2 = ClassTemplateLoader(resourceLoaderClass=org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer, basePackagePath="" /* relatively to resourceLoaderClass pkg */)). ---- FTL stack trace ("~" means nesting-related): - Failed at: #include "footer.ftl" [in template "home/information.ftl" at line 178, column 3] ---- Java stack trace (for programmers): ---- freemarker.core._MiscTemplateException: [... Exception message was already printed; see it above ...] at freemarker.core.Include.accept(Include.java:164) at freemarker.core.Environment.visit(Environment.java:335) at freemarker.core.Environment.visit(Environment.java:341) at freemarker.core.Environment.process(Environment.java:314) at freemarker.template.Template.process(Template.java:383) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.processTemplate(FreeMarkerView.java:391) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.doRender(FreeMarkerView.java:304) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.renderMergedTemplateModel(FreeMarkerView.java:255) at org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel(AbstractTemplateView.java:181) at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:316) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1406) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1150) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) at javax.servlet.http.HttpServlet.service(HttpServlet.java:529) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61) at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458) at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373) at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387) at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:114) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: freemarker.template.TemplateNotFoundException: Template not found for name "home/footer.ftl". The name was interpreted by this TemplateLoader: MultiTemplateLoader(loader1 = org.springframework.ui.freemarker.SpringTemplateLoader@303dbb92, loader2 = ClassTemplateLoader(resourceLoaderClass=org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer, basePackagePath="" /* relatively to resourceLoaderClass pkg */)). at freemarker.template.Configuration.getTemplate(Configuration.java:2957) at freemarker.core.Environment.getTemplateForInclusion(Environment.java:3062) at freemarker.core.Include.accept(Include.java:162) ... 72 more