一、背景

好久没写博客了,最近时间实在是紧的不行,忙中偷闲记录一个小问题先。大概描述就是像题目中说的那样,用console.log打印结果和实际的length不同,以为是遇到鬼了,实际呢,我还是太年轻。
如图:

二、找问题过程

1、 使用typeof看看 发现类型都是string的

2、console.log(JSON.stringify(text)); 发现加了个\t制表符,我们知道,console.log(JSON.stringify(text))有个参数space ,指定缩进用的空白字符串,用于美化输出(pretty-print);如果参数是个数字,它代表有多少的空格;上限为10。该值若小于1,则意味着没有空格;如果该参数为字符串(字符串的前十个字母),该字符串将被作为空格;如果该参数没有提供(或者为null)将没有空格。 (https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)

3、 打印 console.log(text === "" ); 发现都是false,也就是说并不是空字符串

4、 打印 console.log(text === "\t" ); 发现打印的结果是true,也就是说此时的text是一个空格

5、 发现空格之后,打印console.log(trim(sourceText).length); 去掉空格,打印出的结果正常了,长度为0的空字符串

问题所在:
代码中有一句, var text = b.innerText; (b是td元素节点,这部分是获取td里面的内容)

由于其中一个td里面是一个img标签,所以用innertext()获取到的是不含html的内容。用<span></span>测试一下,
发现获取到的还是一个空格,那么可以大致总结下,用innertext()获取td标签的值的话,无论是否获取到结果,后面
都会自动加个空格(\t),就是不清楚这个空格到底是innertext()获取不到值自己解析的,还是td自带的有一个空格?

6、 如果要对innertext()赋值之后的变量进行测试的话,那尽量去掉它的空格,或者把(\t)考虑进去。
JS去除空格参考: https://www.cnblogs.com/bafeiyu/archive/2012/12/13/2816546.html

总结:
      这次问题的出现,整体来说还是对于使用变量不够严谨引起的。在使用变量的时候,如果是int类型,建议类似于php的intval()一样,格式化一下。如果是string类型的话,最起码也要去除下空格。把这些当做习惯,那在开发中肯定会省下很多不必要的小bug。

end

console.log(text)打印不出来的值,用console.log(text.length)却打印出来长度为1?相关推荐

  1. log日志:打印日志到控制台、文件、日志文件分区、打印错误日志到文件

    springboot默认会加载classpath:logback-spring.xml文件 如果需要自定义文件名称,在application.properties中配置logging.config 选 ...

  2. linux下统计log文件中某个字段的值,并计算出平均值

    测试场景:统计log文件output.txt中字段"framesPerSecond"的所有值的平均值 分成两个步骤: 进入对应点log文件所在目录下 第一步:统计出字符串出现的次数 ...

  3. 【 C 】动态内存分配实用案例(一)之读取、排序和打印一列整形值

    什么时候用动态内存分配呢?下面这个案例给出了一个比较实用且精彩地使用动态内存的场合,并且教你如何合理地使用动态内存分配? 动态内存分配一个常见的用途就是为那些长度在运行时才知的数组分配内存空间. 下面 ...

  4. 【C 语言】数组 ( 验证二维数组内存是线性的 | 打印二维数组 | 以一维数组方式打印二维数组 | 打印二维数组值和地址 )

    文章目录 一.验证二维数组内存是线性的 1.打印二维数组 2.以一维数组方式打印二维数组 3.打印二维数组值和地址 二.完整代码示例 一.验证二维数组内存是线性的 验证二维数组内存是线性的 : 验证方 ...

  5. 百田游戏2014笔试题——找到有序序列中某个值第一次出现的位置,并打印

    题目:找到有序序列中某个值第一次出现的位置,并打印(需要考虑算法复杂度,序列可能很大) 分析: 1.该序列是有序序列,由此想到用二分查找法解决问题. 2.陷阱,如果你想到这点后,就觉得题目很简单,直接 ...

  6. ASCII值的用处及其对应符号的打印方法

    打印ASCII值 只需输入需打印的ASCII值的符号,直接使用%d打印即可. 打印ASCII值对应符号 输入需打印符号的ASCII值,直接使用%c进行打印即可. ASCII值的用处 初识c语言可能会对 ...

  7. java如何打印数组的值,Java打印数组元素的值

    本篇文章帮大家学习java打印数组元素的值,包含了Java打印数组元素的值使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. 以下实例演示了如何通过重载 MainClass ...

  8. js打印到控制台_如何实现可复用的控制台“艺术字”打印功能

    之前在使用一些开源项目时,经常会看到在控制台输出项目大大的 LOGO.例如: hexo minos 主题启动时在控制台里会显示「MINOS」文案 fis3 启动时也会有显示「FIS」 添加这种大号「艺 ...

  9. android 串口开发_详细分析Esp8266上电信息打印的数据,如何做到串口通讯上电不乱码打印...

    01 写在前面: 上篇关于如何在内置仅1M的Esp8285做到 OTA 升级的同步到微信公众号,竟然被安信可的某些运维人员看到了,想要转载,我很欣慰,竟然自己的笔记可以被这么大型的公司员工认可! 我是 ...

  10. Java黑皮书课后题第5章:*5.15(显示ASCII码字符表)编写一个程序,打印ASCII字符表从‘!‘到‘~‘的字符。每行打印10个字符。ASCII码表如附录B所示。数字之间用一个空格字符隔开

    *5.15(显示ASCII码字符表)编写一个程序,打印ASCII字符表从'!'到'~'的字符.每行打印10个字符.ASCII码表如附录B所示.数字之间用一个空格字符隔开 题目 题目概述 '!'到'~' ...

最新文章

  1. 公司各个阶段 CTO 需要做什么?(上篇)
  2. 消除python变量的值_SPSS变量值标签的批量设置、复制、显示及删除问题
  3. WebSocket安卓客户端实现详解(一)–连接建立与重连
  4. 算法-找出最近点对问题
  5. Activiti 监听器的配置使用
  6. PermissionError: [Errno 13] Permission denied:
  7. Linux中apt install的lock问题
  8. 技术实践丨PostgreSQL开启Huge Page场景分析
  9. python多变量拟合_Python曲线将多个参数拟合到多个数据集
  10. 防止列宽被撑破的办法,通过css控制
  11. 百度地图Polyline 清除
  12. Android中关于Volley的使用(四)利用NetworkImageView来加载图片
  13. C# 合并多种格式文件为PDF
  14. dosbox运行C语言,DOSBox怎么用?DOSBox使用教程
  15. shell脚本实战之坦克大战小游戏
  16. 系统架构设计方法论——Zachman
  17. 上海市提取公积金攻略
  18. 营业执照遗失该如何处理
  19. spark 和 elk 技术栈对比?
  20. Win10设置添加来宾账户的方法

热门文章

  1. go 变量在其中一个函数中赋值 另一个函数_go 学习笔记之仅仅需要一个示例就能讲清楚什么闭包...
  2. ora-00031:session marked for kill处理oracle中杀不掉的锁
  3. python opencv 凸包
  4. Cryptodome 安装
  5. python下载图片
  6. Python lambda表达式与函数式编程
  7. OpenCL与异构并行计算
  8. 本科遥感考研跨计算机专业好吗,遥感专业考研选择哪些学?哪个学校比较好
  9. html 字号自适应,自适应网页中字体大小自适应屏幕 - YangJunwei
  10. java vo转map_三分钟掌握POJO及其转换——PO、DO、DTO、VO