日期:2014-05-16  浏览次数:20321 次

js基础内容求解答
今天看js面向对象编程指南有两道课后题是这样的:
(1)var a; typeof a; 
(2)10%"0" 
(3) var v=v||10;

输出分别是 
(1)Object
(2) NaN
(3)undefined
求各位大神解答一下其中道理,记住类的话就请绕过吧
------解决方案--------------------
亲 你看错答案了吧
undefined
NaN
10
应该吧
------解决方案--------------------
(1)这个应该是undefined 吧,a有东西才是对象
(2)数字除以字符串是非数字,所以是NaN
(3)=后面的v相当于undefined,而null和 undefined被认为是 false,而10为true,所以这个返回的是10,相当于
v=v? v:10
------解决方案--------------------
var v=v
------解决方案--------------------
10;    输出 undefined,因为赋值没有返回值,这题又没问v的值是多少?

var v=v
------解决方案--------------------
10; v      
这样输出才是10
------解决方案--------------------
楼主你好 我的理解是:
1:  var a ; 默认初始化为undefined,因此 typeof a 得到的结果也是undefined。 楼主描述的结果为object,不知道你用的哪个console,我在chrome和IE11下尝试为undefined。 按照你的结果,a被默认初始化为 null ,typeof null  返回的是object
2: 10%“0”  结果应该是NaN 没错, 但是我看楼上的解答不太严密, “0”在和number类型进行操作的时候被转换为数值0  , 对0取余数操作,结果就是非数值。(补充:对NaN的所有算术操作返回都是NaN,NaN和任何值都不相等,包括自身NaN)
3: var v = v
------解决方案--------------------
10; 结果确实是undefined。 但是v 值确实为10。 v 
------解决方案--------------------
10 中 v 为 undefined,但是转换为NaN 。NaN逻辑或上10 ,得到的值是10;
说的不好,具体为啥NaN是这样的,恐怕得再细节一点, 我在看JS高级程序设计。

------解决方案--------------------

我感觉还是理解上有错误
------解决方案--------------------
引用:
Quote: 引用:

1>.ECMAScript的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的的数据,ECMAScript默认未初始化的值会保存一个特殊的值--undefined
2>.NaN即非数值,是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出异常了),所以第二个你懂的
3>.你那个undefined不知道是怎么出来的,如果是打印v的值,应该是10,当要给变量v赋值的时候,先会去到全局或者你这段代码定义的局部环境中去找这个v值,如果v值定义了,那就把这个v值copy(基本类型是copy,引用类型可就不是copy了)给你现在这个v值,未定义会把10赋给这个v

第三题只是定义了v,但是没有返回值,所以是undefined,这个undefined和v没有关系


我感觉还是理解上有错误