网站做seo收录wordpress 设置ftp

diannao/2025/10/17 14:49:35/文章来源:
网站做seo收录,wordpress 设置ftp,珠海快速网站建设,php应用市场源码1、事务简介 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在关系数据库中#xff0c;一个事务由一组SQL语句组成#xff0c;事务具有4个属性#xff1a;原子性、一致性、隔离性、持久性。这四个属性通常称为ACID原则。 原子性(atomici…1、事务简介 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在关系数据库中一个事务由一组SQL语句组成事务具有4个属性原子性、一致性、隔离性、持久性。这四个属性通常称为ACID原则。 原子性(atomicity): 事务中的操作要么都发生要么都不发生一致性(consistency): 事务从一个一致性的状态变到另一个一致性的状态隔离性(isolation): 事务之间不能相互干扰、相互隔离隔离又分为四个级别: 读未提交(read uncommitted), 读已提交(read committed,解决脏读)、可重复读(rpeatable read ,解决不可重复读)、串行化(serializable 解决幻读)持久性(durability): 持久性也称为永久性(permanence)指一个事务一旦提交它对数据库中数据的改变是永久的接下来的操作或故障不应该对其有任何影响。 1.1、本地事务 Translation 大多数场景下我们的应用都只需要操作单一的数据库这种情况的事务我们称之为本地事务(Local Transation)。本地事务的ACID特性是数据库直接提供支持。本地事务应用架构如下所示 1.2、常见的分布式事务解决方案 seata阿里分布式事务框架消息队列sagaXA 他们都有一个共同点都是两阶段(2PC)。两阶段是指完成整个分布式事务划分成两个步骤完成。 这四种常见的分布式事务解决方法,分别对应着分布式事务的四种模式AT、TCC、Sage、XA 2、Seata是什么 seata是一款开源的分布式事务解决方案致力于提供高性能和简单易用的分布式事务服务。Seata将为用户提供了AT、TCC、SAGA和XA事务模式为用户打造一站式的分布式解决方案。AT模式是阿里首推的模式阿里云上有商用版本的GTS(Global Transaction Service 全局事务服务) 2.1、Seata的三大角色 TC(Transaction Coordinator) - 事务协调者 维护全局和分支事务的状态驱动全局事务提交或回滚 TM(Transaction Manager) - 事务管理器 RM(Resource) - 资源管理器 管理分支事务处理的资源与TC交谈以注册分支事务和报告分支事务的状态并驱动分支事务提交或回滚。 其中TC为单独部署的Server服务端TM和RM为嵌入到应用中的Client客户端。 2.2、AT(auto transcation)模式 AT模式是一种无侵入的分布式事务解决方案 阿里的seata框架实现了该模式 在AT模式下用户只需关注自己的“业务SQL”用户的“业务SQL”作为第一阶段Seata框架会自动生成事务的二阶段提交和回滚操作。 AT模式如何做到对业务的无侵入 一阶段 在一阶段中Seata会拦截“业务SQL”首先解析SQL语义找到“业务SQL要更新的业务数据在业务数据被更新前将其保存成“before image,然后执行”业务SQL“更新业务数据在业务数据更新之后再将其保存成”after image“最后生成行锁以上操作全部在一个数据库事务内完成这样保证了一阶段操作的原子性。 二阶段提交 二阶段如果是提交的话因为业务“SQL”在一阶段已经提交至数据库所以Seata框架只需将一阶段保存的快照数据和行锁进行删掉完成数据清理即可。 二阶段回滚 二阶段如果是回滚的话Seata就需要一阶段已经执行的“业务SQL”还原业务数据回滚方式便是用“before image还原业务数据但在还原前要首先要校验脏写对比数据库当前业务数据和after image,如果两份数据一致就说明没有脏写可以还原数据如果不一致就说明有脏写需要人工干预处理。 2.3、TCC模式 侵入性强并且得自己实现相关事务控制逻辑整个过程中基本没有锁性能更强 TCC模式需要用户根据自己的业务场景实现Try,Confirm和Cancel三个操作;事务发起方在一阶段执行try方式在二阶段提交执行Contirm方法二阶段回滚执行Cancel方法。 2.4、Saga模式 Saga模式是SEATA提供的长事务解决方案在Saga模式中业务流程中每个参与者都提交本地事务当出现某一个参与者失败则补偿前面已经成功的参与者一阶段正向服务和二阶段补偿服务都由业务开发实现。 2.5、XA模式 前提 支持XA 事务的数据库。Java 应用通过 JDBC 访问数据库。 整体机制 在 Seata 定义的分布式事务框架内利用事务资源数据库、消息服务等对 XA 协议的支持以 XA 协议的机制来管理分支事务的一种 事务模式。 执行阶段 可回滚业务 SQL 操作放在 XA 分支中进行由资源对 XA 协议的支持来保证 可回滚持久化XA 分支完成后执行 XA prepare同样由资源对 XA 协议的支持来保证 持久化即之后任何意外都不会造成无法回滚的情况 完成阶段 分支提交执行 XA 分支的 commit分支回滚执行 XA 分支的 rollback 3、Seata快速开始 3.1、Seata Server(TC)环境搭建 Server端存储模式(store.mode)支持三种 file : 单机模式全局事务会话信息内存中读写并持久化本地文件root.data,性能较高(默认)db(5.7) 高可用模式全局事务会话信息通过db共享相应性能差些redis : Seata-Server 1.3及以上版本支持性能较高存在事务信息丢失风险请提前配置当前场景的redis持久化配置 3.1.2、dbNacos方式部署 资源下载地址: 【1.3.0版本windows为例】 https://github.com/seata/seata/releases 1、打开config/file.conf 2、修改mode“db” 3、修改数据库连接信息(url,username,password) 4、创建数据库(seata) 5、下载相关需要的资源 解压完成后我们只需要要这个script文件夹即可 将这个文件夹放入我们的steta目录(方便我们用里面的一些资源) 6、引入sqlscript/server/db/mysql.sql 7、打开conf/registry.conf文件进行修改 registry部分 config部分 8、修改script/config-center/config.txt,为了等一下导入配置 注意点: 配置的事务分组要与客户端配置的事务分组保持一致 客户端properties配置:springcloud.alibaba.seata.tx-service-groupmy_test_tx_troupdefault需要跟客户端和registry.conf中registry中的cluster保持一致 事务分组异地机房停电容错机制 my_test_tx_group可以自定义 比如(guangzhoushanghai)对应的client也要配置 9、配置参数同步到Nacos 1、进入script/config-center/nacos 如果你的ip和端口都是默认的话直接双击即可。否则可以使用下面的启动方式 sh nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t 93d7e8bc-389c-45e1-99a4-1b14a3309d4a 参数说明 -h: nacos地址 -p: nacos端口号 -g: 配置分组默认为SEATA_GROUP -t: Nacos命名空间ID字段默认为空 在git bash里面执行命令即可 10、打开nacos进行查看所有配置成功同步 11、启动seata 找到seata/bin/seata-server.bat双击启动即可 所有启动参数 参数全写作用备注-h–host指定在注册中心注册的ip不指定时获取当前ip外部访问部署建议指定-p–port指定server启动的端口默认8091-m–storeMode事务日志存储方式支持file,db,redis,默认为file注意redis需seata-server1.3版本及以上-n–serverNode用户指定seata-server节点id如1,2,3默认为1-e–seataEnv指定seata-server运行环境如dev,test服务启动会使用registry-dev.conf这样的配置 例子bin/seata-server.sh -h 127.0.0.1 -p 8091 -m db -n 1 -e tset 启动集群方式: bin/seata-server.sh -p 8091 -n 1 bin/seata-server.sh -p 8092 -n 2 bin/seata-server.sh -p 8093 -n 3 这时候我们的steata已经进来了 3.2、分布式事务代码搭建 3.2.1、创建两个数据库 订单数据库 CREATE TABLE order (id bigint NOT NULL AUTO_INCREMENT COMMENT 订单id,product_id bigint NOT NULL COMMENT 商品id,total_amount int NOT NULL COMMENT 商品数量,status tinyint NOT NULL COMMENT 状态,PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8; 库存数据库 CREATE TABLE stock (id bigint NOT NULL AUTO_INCREMENT COMMENT 库存id,product_id bigint NOT NULL COMMENT 商品id,count bigint NOT NULL COMMENT 库存数量,PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8; 3.2.2、创建几个服务模块 seata父模块 pom文件如下 ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdparentartifactIdspringcloud-alibaba/artifactIdgroupIdcom.lili/groupIdversion0.0.1-SNAPSHOT/version/parentpackagingpom/packagingmodulesmoduleseata_order/modulemoduleseata_stock/module/modulesmodelVersion4.0.0/modelVersionartifactIdseata/artifactIdpropertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.target/propertiesdependencies!--web场景启动器--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!--mysql驱动--dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactId/dependency!--lombok--dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependency!--mybatisPlus--dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.2/version/dependency/dependencies /project seata_order子模块 pom文件如下: ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdparentartifactIdseata/artifactIdgroupIdcom.lili/groupIdversion0.0.1-SNAPSHOT/version/parentmodelVersion4.0.0/modelVersionartifactIdseata_order/artifactIdpropertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.target/propertiesdependencies!--nacos 服务 注册与发现--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependency!--添加openfeign的依赖--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId/dependency/dependencies /project yml文件 server:port: 8888 # 服务名称 spring:application:name: order-seata-servercloud:nacos:discovery:server-addr: 101.34.254.160:8847username: nacospassword: nacosnamespace: publicdatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/seata_order?characterEncodingutf-8serverTimezoneUTCusername: rootpassword: root 启动类 EnableFeignClients SpringBootApplication public class SeataOrderApplication {public static void main(String[] args) {SpringApplication.run(SeataOrderApplication.class,args);} } 实体类 Data AllArgsConstructor NoArgsConstructor TableName(ll_order) public class Order implements Serializable {private static final long serialVersionUID 1L;/*** 订单id*/TableId(value id,type IdType.AUTO)private Long id;/*** 商品id*/TableField(product_id)private Long productId;/*** 商品数量*/TableField(total_amount)private Integer totalAmount;/*** 状态*/TableField(status)private Integer status; } mapper层 Mapper public interface OrderMapper extends BaseMapperOrder { } service层接口 public interface OrderService extends IServiceOrder {void addOrder(); } service层实现类 Service public class OrderServiceImpl extends ServiceImplOrderMapper, Order implements OrderService {AutowiredStockFeignService stockFeignService;AutowiredOrderMapper orderMapper;Overridepublic void addOrder(){// 模拟添加订单信息Order order new Order();order.setStatus(0);order.setProductId(10L);order.setTotalAmount(20);// 添加订单orderMapper.insert(order);// 减少库存stockFeignService.updateStock();} } feign下的调用库存接口 FeignClient(value stock-seata-server,path /stock) public interface StockFeignService {RequestMapping(/updateStock)void updateStock(); } controller层 RestController RequestMapping(/order) public class OrderController {Autowiredpublic OrderService orderService;RequestMapping(/addOrder)public void addOrder() {orderService.addOrder();} } seata_stock子模块 pom文件如下: ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdparentartifactIdseata/artifactIdgroupIdcom.lili/groupIdversion0.0.1-SNAPSHOT/version/parentmodelVersion4.0.0/modelVersionartifactIdseata_stock/artifactIdpropertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.target/propertiesdependencies!--nacos 服务 注册与发现--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependency!--添加openfeign的依赖--dependency groupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId/dependency/dependencies /project yml文件 server:port: 9999 # 服务名称 spring:application:name: stock-seata-servercloud:nacos:discovery:server-addr: 101.34.254.160:8847username: nacospassword: nacosnamespace: publicdatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/seata_stock?characterEncodingutf-8serverTimezoneUTCusername: rootpassword: root 实体类 Data AllArgsConstructor NoArgsConstructor TableName(ll_stock) public class Stock implements Serializable {private static final long serialVersionUID 1L;/*** 库存id*/TableId(value id, type IdType.AUTO)private Long id;/*** 商品id*/TableField(product_id)private Long productId;/*** 库存数量*/TableField(count)private Long count; } mapper层 Mapper public interface StockMapper extends BaseMapperStock { } service层接口 public interface StockService extends IServiceStock {void updateStock(); } service层实现类 Service public class StockServiceImpl extends ServiceImplStockMapper, Stock implements StockService {AutowiredStockMapper stockMapper;Overridepublic void updateStock() {// 模拟修改数据Stock stock new Stock();stock.setId(1L);stock.setCount(900L-20L);stockMapper.updateById(stock);} } controller层 RestController RequestMapping(/stock) public class StockController {Autowiredpublic StockService stockService;RequestMapping(/updateStock)public void updateStock(){stockService .updateStock();} } 3.3.3、使用Translation注解测试 服务消费方 Transactional(rollbackFor Exception.class ) public void addOrder(){// 模拟添加订单信息Order order new Order();order.setStatus(0);order.setProductId(10L);order.setTotalAmount(20);// 添加订单orderMapper.insert(order);// 更新库存stockFeignService.updateStock();// 测试异常int i 1/0; } 进行调用测试 java.lang.ArithmeticException: / by zero 控制台正常报错我们来看看数据库 订单表成功回滚但是库存表却已经被改变了 3.3.4、整合seata(GlobalTransactional) 第一步两个服务都需添加下列依赖 !--seata依赖-- dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-seata/artifactId /dependency 第二步各微服务对应数据库中添加undo_log表 CREATE TABLE undo_log(id bigint(20) NOT NULL AUTO_INCREMENT,branch_id bigint(20) NOT NULL,xid varchar(100) NOT NULL,context varchar(128) NOT NULL,rollback_info longblob NOT NULL,log_status int(11) NOT NULL,log_created datetime NOT NULL,log_modified datetime NOT NULL,PRIMARY KEY (id),UNIQUE KEY ux_undo_log (xid,branch_id) )ENGINEInnoDB AUTO_INCREMENT1 DEFAULT CHARSETutf8; 第三步 配置事务的分组这个要与前面设置的分组相对应两个服务都需要配置 spring:cloud:alibaba:seata:tx-service-group: my_test_tx_group 配置seata的注册中心和配置中心两个服务都需配置 #配置seata的注册中心告诉seata client怎么去访问seate server(TC) seata:registry:type: nacosnacos:server-addr: 101.34.254.160:8847 #seate server所在的nacos服务地址application: seata-server #seate server 的服务名username: nacospassword: nacosgroup: SEATA_GROUP # seate server 所在的组默认就是SEATA_GROUP没有改可以不用配置config: # 配置中心type: nacosnacos:server-addr: 101.34.254.160:8847username: nacospassword: nacosgroup: SEATA_GROUP# 如果是默认空间则可以不用添加namespace: 93d7e8bc-389c-45e1-99a4-1b14a3309d4a 最后方法上加上GlobalTransaction注解重新测试 GlobalTransactional public void addOrder(){// 模拟添加订单信息Order order new Order();order.setStatus(0);order.setProductId(10L);order.setTotalAmount(20);// 添加订单orderMapper.insert(order);// 减少库存stockFeignService.updateStock();// 测试异常int i 1/0; } 运行保存后发现我们的数据成功回滚分布式事务到这里已经完全配置成功了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/92206.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站为什么被挂马长久新开传奇网站

distinct MongoDB 的 distinct 命令是获取特定字段中不同值列表的最简单工具。 该命令适用于普通字段、数组字段以及数组内嵌文档(集合对象)。 db.getCollection(customer).distinct("customer_type")// chances字段的值是个集合,获…

html5行业网站企业服务中心抖音

当构建高可用的网络应用时,负载均衡是至关重要的技术之一。Nginx 是一个强大的开源反向代理服务器,提供了丰富的负载均衡功能,包括负载均衡算法和健康检查。在本篇博客中,我们将讨论如何使用 Nginx 进行负载均衡,并结合…

门户网站推广优势小程序开发定制公司北京

一:题目 二:思路 1.这个题不能用优先队列,虽然我们可以通过优先队列得到最大值,但是我们在移动 窗口的时候,便不可以正常的删除元素了 2.虽然不能用优先对列,但是我们依然希望可以得到队首的元素的时候是最大值,同时还…

网站的下拉列表怎么做洛阳php网站开发

题目背景:目前往往需要对测序后的序列进行聚类与比对。其中聚类指的是将测序序列聚类以判断原始序列有多少条,聚类后相同类的序列定义为一个簇。比对则是指在聚类基础上对一个簇内的序列进行比对进而输出一条最有 可能的正确序列。通过聚类与比对将会极大…

建设网站主机可以用吗做软件开发有前途吗

Makefile中: ? 的区别 在Makefile中我们经常看到 : ? 这几个赋值运算符,那么他们有什么区别呢?我们来做个简单的实验 新建一个Makefile,内容为: ifdef DEFINE_VRE VRE “Hello World!” else endif ifeq ($(OPT),define) VRE…

工伤做实的那个网站找人做网站大概多少钱

有这样一个3位数,组成它的3个数字阶乘之和正好等于它本身。 即:abc a! b! c! 请找出所有满足要求的三位数.审好题很重要:三位数而非,三位数的个数 先写出一个函数求出某个数的阶乘,在跟别求出一个三位数的个十百位&…

178网站建设西安买公司的网站建设

今天在使用souce建表的时候发现自己表结构中的中文出现了乱码问题,那么具体的解决方案如下: 首先我们先使用命令行连接自己的数据库 mysql -u root -p 12345 然后使用show variables like "char%"; 如果说你的这个里面不是utf-8那么就是出现了…

php网站建设价格临沂制作网站软件

恕我直言,我一直都用 git pull 从来没有用过 git fetch git fetch, git pull 都可以用于获取远程仓库的内容,但它们有不同的作用和用法。 git fetch 用途:git fetch 用于从远程仓库获取最新的提交,但不会自动合并或更新本地分支…

网站访客qq获取系统 报价织梦小说网站源wap站

贴片陶瓷气体放电管 GDT工作原理GDT主要特性参数典型电路压敏电阻与 TVS 管的区别 GDT工作原理 陶瓷气体放电管是一种电子器件,其工作原理基于气体放电现象。这种管子的内部填充了一种特定的气体,通常是氖气或氩气。当管子两端施加足够的电压时&#xf…

福清营销型网站建设方案qq的seo综合查询

购买装备 发布时间: 2017年7月9日 18:17 最后更新: 2017年7月9日 21:05 时间限制: 1000ms 内存限制: 128M 描述 最近盛大的一款游戏传奇世界极其火爆。游戏玩家John,想购买游戏中的装备。已知游戏的商店里有n件装备,第i件装备具有属性值ai&#xf…

更新网站的图片加不上水印云服务器做网站一般配置

自动控制:控制系统的稳定性 在自动控制领域,控制系统的稳定性是一个至关重要的问题。稳定性决定了系统在受到扰动后是否能够恢复到平衡状态。本文将介绍控制系统稳定性的基本概念、如何利用特征值分析稳定性,并通过具体示例和Python代码展示…

网站设计和平面设计拆分盘网站建设

⭐简单说两句⭐ ✨ 正在努力的小新~ 💖 超级爱分享,分享各种有趣干货! 👩‍💻 提供:模拟面试 | 简历诊断 | 独家简历模板 🌈 感谢关注,关注了你就是我的超级粉丝啦! &…

psd 网站唯美wordpress简约主题

前言:堆算是一种相对简单的数据结构, 本篇文章将详细的讲解堆中的知识点, 包括那些我们第一次学习堆的时候容易忽略的内容, 本篇文章会作为重点详细提到。 本篇内容适合已经学完C语言数组和函数部分的友友们观看。 目录 什么是堆 建堆算法…

美工设计网站推荐seo多久可以学会

基于3Blue1Brown视频的笔记 一种新的看待方式 对于一个向量,比如说,如何看待其中的3和-2? 一开始,我们往往将其看作长度(从向量的首走到尾部,分别在x和y上走的长度)。 在有了数乘后&#xff0…

做网站销售好吗西安公司网站建设服务商

Linux下编译、链接、加载运行C OpenCV的两种方式及常见问题的解决 在Linux下安装完OpenCV C之后(还没有安装的读者请参考Ubuntu 18.04 安装OpenCV C),本文将探索Linux下编译、链接C OpenCV的两种方式,并且给出笔者在初次尝试时遇…

如何做分销型网站深圳模板网站建设案例

今天。。。不,是昨天,聂老大让我们写暑期总结 其中有这么一个 (300字啊。。。我得好好想想怎么编) 嘛,在这写点不敢交上去的内容吧。 7月总结 我收获了什么 很多课件 两个qq群 slay.one被人虐 联盟无畏先锋的号到了20级…

面包店网站建设论文网上怎么自己做网站

作者/云荒杯倾写在前面vue中关于插槽的文档说明很短,语言又写的很凝练,再加上其和methods,data,computed等常用选项使用频率、使用先后上的差别,这就有可能造成初次接触插槽的开发者容易产生“算了吧,回头再…

容桂新网站建设动态ip怎么建设网站

题目描述 【5键键盘的输出】有一个特殊的 5键键盘,上面有 a,ctrl-c,ctrl-x,ctrl-v,ctrl-a五个键。 a键在屏幕上输出一个字母 a; ctrl-c将当前选择的字母复制到剪贴板; ctrl-x将当前选择的 字母复制到剪贴板,并清空选择的字母; ctrl-v将当前剪贴板里的字母…

php网站开发软件东莞网页

首先看看下面这段程序: uint32_t compare 10; for (uint32_t i compare; i > 0; --i) { .......... } 这是一段比较危险的程序, 当 i的值变为 -1的时候,其实由于i是一个非负数整形,强制类型转换后,i又…

如何自己建站网站制作如何运营一个电商平台

判断两个变量是否相等在任何编程语言中都是非常重要的功能。 JavaScript 提供了 和 两种判断两个变量是否相等的运算符,但我们开始学习的时候 JavaScript 的时候,就被一遍又一遍的告知: 要求变量的类型和值均相等,才能返回true…