关于判断NaN的问题

huanshirenjian 2015-07-25 11:12:49
function isNaN(obj){
var a = obj !== obj;
alert(a);
return a;
}
isNaN({});//能返回false;
但是如果:var a = {} !== {};alert(a);
a是true。。为什么会这样
...全文
156 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
huanshirenjian 2015-07-27
  • 打赏
  • 举报
回复
忘了值传递和引用传递了。。。。
顾小林 2015-07-26
  • 打赏
  • 举报
回复
===,不做类型转换,类型不同的一定不等。{}属于对象,对于对象的相等 应该是通过引用地址来判断
vuturn 2015-07-26
  • 打赏
  • 举报
回复
很简单,你的obj都是变量,指向同一个对象,而{}和{}是两个不同的对象,占用两块不同的内存,同理匿名函数不等于匿名函数。
蝶恋花雨 2015-07-25
  • 打赏
  • 举报
回复
a是一个对象,是一个没有任何属性的对象。 !=={}
forwardNow 2015-07-25
  • 打赏
  • 举报
回复
var o1 = {}; var o2 = {}; o1 === o2; //=> false // 虽然 o1 和 o2 都是没有任何属性的对象,但是它们是不同的对象, var o3 = {}; o3 === o3; //=> true // 而你isNaN()函数,是对变量自身的比较,一般情况下都是相等, // 但也有特殊情况,如下,NaN是全家变量的属性,不是对象,但它很特殊。 NaN === NaN; //=> false
圆㺭 2015-07-25
  • 打赏
  • 举报
回复
调用函数isNaN()传递进去的obj保存的是对象的地址而不是对象本身,JavaScript中传递参数都是按值传递的,调用函数会创建一个新的obj(也是保存对象地址)但是他跟原先的obj指向的是同一个对象,所以返回false。
天际的海浪 2015-07-25
  • 打赏
  • 举报
回复
{} !== {} 这样是创建两个对象,两个对象的引用地址不一样。当然不相等了 应该这样测试 var s = {}; var a = s !== s; alert(a);

87,888

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧