资讯专栏INFORMATION COLUMN

一个奇葩问题引发的"吐血"

caohaoyu / 908人阅读

摘要:不信,那我们来两个代表示例看看基本类型引用类型它们的引用地址相同看起来好像是没什么问题的。总结任何时候任何一个问题都不要小看它,拘束于表面,因为它随时都会是一个坑,让你跳进去,认真点总不会有坏处的。

某天,和某同事交流技术,他提到了一个问题:在js中,如果一个变量赋值给另一个变量,那么他们一定相等吗?为什么?。然后,我脱口而出,是相等,这无毛病。变量赋值本身就只是一个定义好的变量的副本,他们相等是没问题的,即便是引用类型的数据对象,在赋值的时候保持着内存的同一引用,它们当然也相等啊。当然注意这里是相等,不是全等。即"=="而非"===",所以没有什么类型转换的讨论。不信,那我们来两个代表示例看看:

//基本类型
var a;
var b = a;
b == a;//true
//引用类型
var a = {};
var b = a;
b == a;//true,它们的引用地址相同

看起来好像是没什么问题的。然而事实真的是这样吗?

我转念一想,不对啊,有这么简单的问题?同事再给我一个例子,狠狠的打击了我,卧槽,还可以这样?

js数据当中还有一个特殊的值,那就是NaN

var a = NaN;
var b = a;
b == a;//猜猜这里是啥

答案真的是出乎你的意料,当然是false,也就是不相等啦。

不带这么玩的吧?

后面脑袋一闪,原来如此,这么低级的错误都犯,NaN虽然是一个数值型的值,但是它并不是一个确切的值,所以NaN !== NaN。也就是说,变量的赋值也不会改变它们的不等性呢。

还可以这么玩。

ps:总结:任何时候任何一个问题都不要小看它,拘束于表面,因为它随时都会是一个坑,让你跳进去,认真点总不会有坏处的。

鄙人创建了一个QQ群,供大家学习交流,希望和大家合作愉快,互相帮助,交流学习,以下为群二维码:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/109491.html

相关文章

  • scrapy学习笔记(三):使用item与pipeline保存数据

    摘要:最近真是忙的吐血。。。上篇写的是直接在爬虫中使用,这样不是很好,下使用才是正经方法。 最近真是忙的吐血。。。 上篇写的是直接在爬虫中使用mongodb,这样不是很好,scrapy下使用item才是正经方法。在item中定义需要保存的内容,然后在pipeline处理item,爬虫流程就成了这样: 抓取 --> 按item规则收集需要数据 -->使用pipeline处理(存储等) 定义it...

    13651657101 评论0 收藏0
  • 怎么利用python自动生成数据日报

      小编写这篇文章的主要目的,是给大家介绍一下自动化办公,能够大大的其提高办公的效率。那么,怎么样才能够生成日报呢?下面给大家详细的解答下。  下面我们通过一个补写销售日报的案例,展示一下Python自动化办公的优势。本文简化了案例的流程。  需求详解  朋友的需求是这样的,他们平时的销售数据是记录在Excel上,汇总后会按照部门进行统计。但是今年年初时,领导突然要求写日报,大家写了一个月发现并不...

    89542767 评论0 收藏0
  • Python常见异常问题总结

      小编写这篇文章的一个主要目的,就是来给大家去做一个解答,解答的内容主要是Python常见的一些bug和异常问题,那么,遇到这些问题的时候,我们需要找到好办法去进行处理。那么,小编这边就给大家做了一个总结,总结常见的异常问题,大家好好阅读哦。  异常处理介绍  在实际的开发中,我们经常遇到一些报错的例子,在pycharm的显示页面下,当我们看到一串串的红色的英文字母的时候,就是出现异常,这个时候...

    89542767 评论0 收藏0
  • python异常怎么才能跳过继续执行

      在使用python的时候,经常性的会遇到各种各样的问题,比如出现异常的时候,怎么才能够跳过其异常继续执行呢?下面就给大家详细的解答下。  python如何跳过异常继续执行  下面有两种解决方法  第一种是类似if…else…;另外一种是使用语句来实现继续执行;  方法一:使用try…except…语句,类似于if…else…,可以跳过异常继续执行程序,这是Python的优势  用法如下:  方...

    89542767 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<