某天,和某同事交流技术,他提到了一个问题:在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群,供大家学习交流,希望和大家合作愉快,互相帮助,交流学习,以下为群二维码:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。