答案:JS中if(“true” == “true”) 结果当然为true。只是因为响应的数据最后带有回车“\n”,if(“true\n” == “true”) 结果当然为false啦。

该BUG特定的场景

后端:

在servlet中写了非常简短的代码,响应中返回布尔值true

        response.setContentType("text/html, charset=utf-8");response.getWriter().println(true);
前端:

在js中写了异步响应请求(这不重要),接收后端响应的数据(var val = xhr.responseText;)

<script>var xhr;function test() {xhr = new XMLHttpRequest();xhr.open("GET", "/date0813_war_exploded/equalTest.do", true);xhr.onreadystatechange = callback;xhr.send(null);}function callback() {if (xhr.status === 200 & xhr.readyState === 4){var val = xhr.responseText;if (val){alert("相等")}else {alert("不相等")}}}
</script>

令人窒息的BUG们

记住:从后端返回的值存在 val 中

BUG一号选手

if (val)
无论我们后端传的是true还是false,if (val) 都是true,why?

我们输出一下val-----> true 或者是 false (后端传什么就输出什么)
我们输出一下typeOf(val)-----> String
原来这个问题在这,js并没有把传来的true和false当做布尔值,而是当作字符串了,而js中的if(字符串),只要字符串有值,不论字符串内容,if(字符串)都为true。
所以if (val) 行不通。

BUG二号选手

if (val == “true”)
无论我们后端传的是true还是false,if (val) 都是false,why?

我们输出一下val-----> true 或者是 false (后端传什么就输出什么)
我们输出一下typeOf(val)-----> String
我们输出一下val.length-----> 5
原来这个问题在这,只有4个字符的true的长度竟然为5,逐个输出true的字符后,发现最后一个字符为“\n”。

解决BUG

那么罪魁祸首就是response.getWriter().println(true);的println : 输出并换行!并!换!行!

解决方案一

改后端:将.println(); 改成print()

解决方案二

改前端:将if (val == “true”); 改成if (val.trim() == “true”)

总结

遇到BUG的时候真的觉得很神奇,感觉JS的if判断就很诡异,后来找到问题所在又觉得JS还是很正经的。挺有意思,所以记录下来。
在遇到这个有趣的bug的时候还学到一些有趣新知识,建议搜搜js if(0=="")返回ture的问题。

后端响应的字符串“true”,在JS中不等于“true”?JS中if(“true“ == “true“),结果为false?相关推荐

  1. 正则匹配不包含某字符串_如何替换JS字符串中匹配到多处中某一指定节点?

    来源 | https://www.cnblogs.com/class1/p/14273231.html 问题先行,要求搜索关键字,匹配到四处,那我鼠标放在第二处,我想把它变个颜色,该怎么实现呢?截图如 ...

  2. js中单引号和双引号的区别(html中属性规范是用双引号,js中字符串规定是用单引号)(js中单引号区别和php很像:单引号快,双引号可转义字符,双引号可解析变量)...

    js中单引号和双引号的区别(html中属性规范是用双引号,js中字符串规定是用单引号)(js中单引号区别和php很像:单引号快,双引号可转义字符,双引号可解析变量) 一.总结 1.html中属性规范是 ...

  3. js在html中拆分字符串,js中的split方法 js用split()取字符串

    本来想通过静态HTML传递参数,动态读取url0和url字段,试了一下没成功.定义和用法 split() 方法用于把一个字符串分割成字符串数组. 语法 stringObject.split(separ ...

  4. node.js学习总结:node.js的内置模块,模块化,npm与包 express,前后端身份认证 JWT认证机制

    node.js学习总结 什么是node.js node.js的内置模块 fs系统模块 path路径模块 http模块 模块化 npm与包 express express路由 express+mysql ...

  5. Node.js零基础自学(持续更新中)

    1. Node.js时基于Chrome V8 引擎的JavaScript运行环境.官网:Node.jsNode.js® is a JavaScript runtime built on Chrome' ...

  6. 后端——egg.js是什么、egg.js安装、约定规则、路由Router、控制器Controller、跨域

    目录 一.egg.js是什么 二.egg安装 三.约定规则 四.路由Router 五.控制器Controller 六.跨域 1.egg-cors 1.下载 2.开启插件 3.配置插件 4.使用: 2. ...

  7. JS逆向学习笔记 - 持续更新中

    JS逆向学习笔记 寻找深圳爬虫工作,微信:cjh-18888 文章目录 JS逆向学习笔记 一. JS Hook 1. JS HOOK 原理和作用 原理:替换原来的方法. (好像写了句废话) 作用: 可 ...

  8. js插件---webuploader 使用(lavarel中使用)

    js插件---webuploader 使用(lavarel中使用) 一.总结 一句话总结: 多去看几个具体使用的实例,很多blog教程都有坑,多看几个交叉印证可以没那么多坑 1.webuploader ...

  9. python中 getnode用法_node.js 爬虫入门总结

    node.js爬虫 前端同学可能向来对爬虫不是很感冒,觉得爬虫需要用偏后端的语言,诸如 php , python 等.当然这是在 nodejs 前了,nodejs 的出现,使得 Javascript ...

最新文章

  1. 剑指offer:面试题32 - II. 从上到下打印二叉树 II
  2. 【Go】Go基础(三):基本结构和基本数据类型
  3. 外企面试官们爱提的十个问题
  4. CSS选择器分类与优先级
  5. http1.0 http1.1 http2 之间的区别
  6. 存放80000000学生成绩的集合,怎么统计平均分性能高
  7. 引入我们全新的YouTube频道进行视频课程编程
  8. JavaFX 2:创建登录表单
  9. linux 下查看程序依赖的库
  10. 轮盘赌算法的java实现算例
  11. 零点起飞学php下载,零点起飞学PHP(附光盘)/零点起飞学编程
  12. c语言二级笔试试卷,二级C语言笔试试卷
  13. vs C# 强制结束进程
  14. 【组合数学】递推方程 ( 特特解示例 1 汉诺塔 完整求解过程 | 特解示例 2 特征根为 1 的情况下的特解处理 )
  15. ISO9001 质量管理体系认证
  16. 小鼠大脑解剖图分区_大鼠解剖图_求助:大鼠#47;小鼠脑部解剖图谱
  17. ps html css 工具,PS常用九大抠图工具
  18. CentOS 7 之Helloworld with c
  19. C语言socket重连和心跳,c# socket 心跳 重连
  20. linux jmap命令详解,jmap命令 linux jmap如何使用

热门文章

  1. 2018上海国际专业灯光音响展盛大开幕
  2. ue4 怎么修改骨骼动画_【UE4】神器!!!动画师必备!!!基于物理的动画制作软件 Cascadeur 使用指南!...
  3. 手机聊天APP技术开发
  4. wifi只是无人机图传的方法之一
  5. PaddleOCR文字识别C#部署-1
  6. 将图片当做单独的页插入pdf中~
  7. word西文换行,末尾添加小横线方法(连字符)
  8. 【Linux踩坑日记】:ubuntu环境下Linux系统没有网络连接,ifconfig查看发现只有lo,没有以太网eth0连接解决方法
  9. java-php-python-日常办公管理系统计算机毕业设计
  10. 火绒安全警报:疑似方正集团子公司签名泄露 遭黑客利用盗取Steam账号