最近正在研究红宝书,在数值转换这里发现了一个问题,关于Number函数的。
书上是这么说的:
然后我就这个说法在console里面写了个test,代码如下:
var obj = {
valueOf:function(){
return "abcd";
},
toString:function(){
return 123;
}
};
Number(obj);
以及返回的结果:
然后问题来了,为什么返回的是NaN?按照书上说的,先调用对象的valueOf()
方法,将方法返回的值进行数值转换,然后判断结果,如果是NaN则会继续调用对象的toSting()方法,再将方法返回的值进行数值转换,得到最终结果应该是123。但是最后返回的不是123而是NaN,这是为什么,是因为这个obj只是一个简单对象吗?还是我这个例子没写对-_-!
向各位大佬请教!!
这才是你想要的效果
书上说的很清楚,如果是对象,调用valueof之后,你返回的是字符串,按照之前字符串处理,结果是NaN。
上面那个是对象,但是没定义valueof所以是NaN,之后调用toString