后端响应的字符串“true”,在JS中不等于“true”?JS中if(“true“ == “true“),结果为false?
答案: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?相关推荐
- 正则匹配不包含某字符串_如何替换JS字符串中匹配到多处中某一指定节点?
来源 | https://www.cnblogs.com/class1/p/14273231.html 问题先行,要求搜索关键字,匹配到四处,那我鼠标放在第二处,我想把它变个颜色,该怎么实现呢?截图如 ...
- js中单引号和双引号的区别(html中属性规范是用双引号,js中字符串规定是用单引号)(js中单引号区别和php很像:单引号快,双引号可转义字符,双引号可解析变量)...
js中单引号和双引号的区别(html中属性规范是用双引号,js中字符串规定是用单引号)(js中单引号区别和php很像:单引号快,双引号可转义字符,双引号可解析变量) 一.总结 1.html中属性规范是 ...
- js在html中拆分字符串,js中的split方法 js用split()取字符串
本来想通过静态HTML传递参数,动态读取url0和url字段,试了一下没成功.定义和用法 split() 方法用于把一个字符串分割成字符串数组. 语法 stringObject.split(separ ...
- node.js学习总结:node.js的内置模块,模块化,npm与包 express,前后端身份认证 JWT认证机制
node.js学习总结 什么是node.js node.js的内置模块 fs系统模块 path路径模块 http模块 模块化 npm与包 express express路由 express+mysql ...
- Node.js零基础自学(持续更新中)
1. Node.js时基于Chrome V8 引擎的JavaScript运行环境.官网:Node.jsNode.js® is a JavaScript runtime built on Chrome' ...
- 后端——egg.js是什么、egg.js安装、约定规则、路由Router、控制器Controller、跨域
目录 一.egg.js是什么 二.egg安装 三.约定规则 四.路由Router 五.控制器Controller 六.跨域 1.egg-cors 1.下载 2.开启插件 3.配置插件 4.使用: 2. ...
- JS逆向学习笔记 - 持续更新中
JS逆向学习笔记 寻找深圳爬虫工作,微信:cjh-18888 文章目录 JS逆向学习笔记 一. JS Hook 1. JS HOOK 原理和作用 原理:替换原来的方法. (好像写了句废话) 作用: 可 ...
- js插件---webuploader 使用(lavarel中使用)
js插件---webuploader 使用(lavarel中使用) 一.总结 一句话总结: 多去看几个具体使用的实例,很多blog教程都有坑,多看几个交叉印证可以没那么多坑 1.webuploader ...
- python中 getnode用法_node.js 爬虫入门总结
node.js爬虫 前端同学可能向来对爬虫不是很感冒,觉得爬虫需要用偏后端的语言,诸如 php , python 等.当然这是在 nodejs 前了,nodejs 的出现,使得 Javascript ...
最新文章
- 剑指offer:面试题32 - II. 从上到下打印二叉树 II
- 【Go】Go基础(三):基本结构和基本数据类型
- 外企面试官们爱提的十个问题
- CSS选择器分类与优先级
- http1.0 http1.1 http2 之间的区别
- 存放80000000学生成绩的集合,怎么统计平均分性能高
- 引入我们全新的YouTube频道进行视频课程编程
- JavaFX 2:创建登录表单
- linux 下查看程序依赖的库
- 轮盘赌算法的java实现算例
- 零点起飞学php下载,零点起飞学PHP(附光盘)/零点起飞学编程
- c语言二级笔试试卷,二级C语言笔试试卷
- vs C# 强制结束进程
- 【组合数学】递推方程 ( 特特解示例 1 汉诺塔 完整求解过程 | 特解示例 2 特征根为 1 的情况下的特解处理 )
- ISO9001 质量管理体系认证
- 小鼠大脑解剖图分区_大鼠解剖图_求助:大鼠#47;小鼠脑部解剖图谱
- ps html css 工具,PS常用九大抠图工具
- CentOS 7 之Helloworld with c
- C语言socket重连和心跳,c# socket 心跳 重连
- linux jmap命令详解,jmap命令 linux jmap如何使用
热门文章
- 2018上海国际专业灯光音响展盛大开幕
- ue4 怎么修改骨骼动画_【UE4】神器!!!动画师必备!!!基于物理的动画制作软件 Cascadeur 使用指南!...
- 手机聊天APP技术开发
- wifi只是无人机图传的方法之一
- PaddleOCR文字识别C#部署-1
- 将图片当做单独的页插入pdf中~
- word西文换行,末尾添加小横线方法(连字符)
- 【Linux踩坑日记】:ubuntu环境下Linux系统没有网络连接,ifconfig查看发现只有lo,没有以太网eth0连接解决方法
- java-php-python-日常办公管理系统计算机毕业设计
- 火绒安全警报:疑似方正集团子公司签名泄露 遭黑客利用盗取Steam账号