为什么js 3>2>1 为false,1<2<3为true?

本文详细解析了JavaScript中大于、小于运算符在不同数值比较时的行为逻辑,包括3>2>1与1<2<3的真假判断,解释了其背后的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:为什么js 3>2>1 为false,1<2<3为true?

首先,我们需要知道,在js中 0 == false和1 == true是正确的。
因此在分析3>2>1时,我们可以将其分为两步,首先是3>2返回是true,也就等价于1。
所以1>1结果自然是false了。

同理,1<2是true,等价于1,1<3也是true。

在可以考虑,3<2<1的情况呢,3<2是false,也就是0,0<1自然就是true了。
你遇到的问题非常典型: > **当配置了完整的 `<resources>`(包括 properties、sql、static 分别处理)时,前端页面加载失败;但如果只保留 `static/**` 的资源加载,并启用 `filtering=true`,则页面能正常显示。** --- ## ✅ 问题分析 ### 🚫 错误现象描述 | 配置方式 | 能否访问前端 | |----------|--------------| | 完整的 `<resources>`(分 properties/sql/static) | ❌ 无法访问前端 | | 只保留一个 `<resource>` 加载 `static/**` 并设置 `filtering=true` | ✅ 前端可以访问 | --- ## 🔍 真正原因:**多个 `<resource>` 配置覆盖了默认行为** 在 Maven 中,默认会将整个 `src/main/resources/` 目录下的内容打包到输出目录(如 `target/classes/`),但如果你自定义了 `<resources>`,那么 **默认行为会被覆盖**。 也就是说: > **一旦你在 `pom.xml` 中写了 `<resources>`,Maven 就只会处理你显式列出的那些资源路径**。 所以: ```xml <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <includes> <include>*.properties</include> <include>*.yml</include> </includes> </resource> ... </resources> ``` 上面这段配置意味着: - **只有 `*.properties`, `*.yml` 文件被复制** - **其他所有资源(如 `/static/` 下的内容)都不会被复制!** 这就是为什么前端页面无法加载的根本原因 —— **HTML、JS、CSS 文件根本没有被打包进最终的 jar 包中**。 --- ## ✅ 正确做法:确保所有必要的资源都被包含 你原来的完整 `<resources>` 配置是正确的,但必须保证: - 所有需要的资源类型都明确列在 `<includes>` 中 - 没有遗漏任何目录(比如 `static/`) --- ## ✅ 推荐修正后的完整 `<resources>` 配置 ```xml <resources> <!-- 1. 配置文件(application.properties, application.yml) --> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <includes> <include>*.properties</include> <include>*.yml</include> </includes> </resource> <!-- 2. SQL 脚本 --> <resource> <directory>src/main/resources</directory> <filtering>false</filtering> <includes> <include>*.sql</include> </includes> </resource> <!-- 3. 静态资源(HTML, JS, CSS) --> <resource> <directory>src/main/resources</directory> <filtering>false</filtering> <includes> <include>static/**</include> </includes> <targetPath>${project.build.outputDirectory}</targetPath> </resource> </resources> ``` 这个配置是标准且推荐的做法,但它要求: ✅ **确保你的静态资源放在 `src/main/resources/static/` 下** 否则,如果你把 HTML 放在 `src/main/resources/templates/` 或别的地方,它就不会被复制! --- ## ✅ 如果你想简化配置,只加载 static 目录(不关心 properties/yml/sql) 你可以使用如下最简配置(适用于调试或简单项目): ```xml <resources> <!-- 仅加载 static 目录,不处理变量替换 --> <resource> <directory>src/main/resources</directory> <filtering>false</filtering> <includes> <include>static/**</include> </includes> <targetPath>${project.build.outputDirectory}</targetPath> </resource> </resources> ``` 这样虽然不能加载 `.properties` 和 `.sql` 文件,但可以确保前端资源正确打包。 --- ## ✅ 如何验证是否成功打包? 构建项目后执行: ```bash mvn clean package ``` 然后查看 jar 包内容: ```bash jar tf target/your-app.jar | grep BOOT-INF/classes/static/ ``` 你应该看到类似输出: ``` BOOT-INF/classes/static/index.html BOOT-INF/classes/static/js/app.js BOOT-INF/classes/static/css/style.css ``` 如果没有这些文件,请检查你的 `<resources>` 配置是否包含 `static/**`。 --- ## ✅ 补充说明:`targetPath` 是做什么的? ```xml <targetPath>${project.build.outputDirectory}</targetPath> ``` 这句的意思是: > 把当前 resource 的内容复制到构建输出目录(通常是 `target/classes/`) 这对于 Spring Boot 来说非常重要,因为 Spring 默认从 `classpath:/static/` 加载资源,而该路径对应的就是: ``` target/classes/static/ ``` --- ## ✅ 总结对比表 | 配置方式 | 是否包含 static 资源 | 是否启用 filtering | 是否能访问前端 | |----------|---------------------|--------------------|----------------| | 完整 `<resources>` + 包含 `static/**` | ✅ 是 | ✅ 否(安全) | ✅ 能访问 | | 完整 `<resources>` - 忘记 `static/**` | ❌ 否 | - | ❌ 无法访问 | | 只保留 `static/**` + `filtering=false` | ✅ 是 | ❌ 否 | ✅ 能访问 | | 只保留 `static/**` + `filtering=true` | ✅ 是 | ✅ 是(可能破坏 JS/HTML) | ❌ 页面出错 | --- ##
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值