有趣问题及答案

一、为什么 1=0.9999999999…… ?
 
 
 
 
  这个可以用极限来解释,0.999九的循环可以分成0.9+0.09+0.009+0.0009+0.00009+...这个无穷的等比数列来表示,公比是0.1。而对于公比的绝对值小于1的无穷等比数列的和为首项除以1减公比的绝对值,即0.9/(1-0.1)=1。所以1=0.999九的循环,你也可以用1除以3再乘以3来理解 
二、为什么 alert(0.1 + 0.2)//0.30000000000000004 ?
     JavaScript 是一门弱类型的语言,从设计思想上就没有对浮点数有个严格的数据类型,所以精度误差的问题就显得格外突出
 
 

所以我们先把 0.1 和 0.2 转换成二进制看看:

0.1 => 0.0001 1001 1001 1001…(无限循环)

0.2 => 0.0011 0011 0011 0011…(无限循环)

双精度浮点数的小数部分最多支持 52 位,所以两者相加之后得到这么一串 0.0100110011001100110011001100110011001100110011001100

因浮点数小数位的限制而截断的二进制数字,这时候,我们再把它转换为十进制,就成了 0.30000000000000004。

三、为什么 alert(0123 + 4)//87 ?

    “0123”是数字0开头的符号,被看成是8进制数值,转换成十进制表示就是83。83+4=87,输出自然就是87了。

四、var obj1 = {}; obj1.name2 = "张三";
var str1 = "test"; str1.name2 = "李四";
alert(obj1.name2 + " " + str1.name2);//弹出值是什么?

	alert(张三 undefined);

五、var obj1 = { name2: "111" };
var obj2 = obj1;
obj1.name2 = "222";
alert(obj2.name2);//这里弹出什么?
obj1 = { name2: "333" };
alert(obj2.name2);//这里弹出什么?
	
	两个都是弹出222


六、 var fun = function (num1) {
     if (num1 <= 1) {
         return 1;
     }
     else {
         return num1 * fun(num1 - 1);
     }
 }
 var fun2 = fun;
 fun = function () {
     return 1;
 }
 alert(fun2(5));//这里弹出什么?
	弹出5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值