一、为什么 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 是一门弱类型的语言,从设计思想上就没有对浮点数有个严格的数据类型,所以精度误差的问题就显得格外突出
三、为什么 alert(0123 + 4)//87 ?所以我们先把 0.1 和 0.2 转换成二进制看看:
0.1 => 0.0001 1001 1001 1001…(无限循环)
0.2 => 0.0011 0011 0011 0011…(无限循环)
双精度浮点数的小数部分最多支持 52 位,所以两者相加之后得到这么一串 0.0100110011001100110011001100110011001100110011001100
因浮点数小数位的限制而截断的二进制数字,这时候,我们再把它转换为十进制,就成了 0.30000000000000004。
“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