前言
基础知识真有趣,10个基础知识的题目,请君来战!
1. a.x = a = {n:2}
var a = {n:1};
a.x = a = {n:2};
// 求a.x
alert(a.x);
解析
JavaScript 总是严格按照从左至右的顺序来计算表达式。
a.x 最后执行赋值的时候,保留的是对 原来a的引用
, alert的时候,a是被重新赋值过后的a。
var a = {n:1}, ref = a;
a.x = a = {n:2};
console.log("a:", a);
console.log("ref:",ref);
2. 按位或取整数部分
求值:
100.8 | 0
-101.6 | 0
8589934592.8 | 0
解析
位运算符将数字视为32位的有符号整数,而32位整数的取值范围是 -2147483648 ~ 2147483647
。
超过32位有符号整数范围取值的数,进行位或操作取整都是不准确的。
2147483647.1 | 0 // 2147483647 正确
2147483648.1 | 0 // -2147483648 错误
-2147483648.1 | 0 // -2147483648 正确
-2147483649.1 | 0 // 2147483647 错误
同样的,我们可以用~~
来取整数部分, 当然依旧存在超范围就不准确的问题。
~~ 100.8 // 100 正确
~~ 2147483649.1 // -2147483647 错误
答案
100.8 | 0 // 100
-101.6 | 0 // -101
8589934592.8 | 0 // 0
3. 神奇的eval
var x = "global";
function log1(){
var x = "local";
return eval("x")
}
function log2(){
var x = "local";
return window.eval("x")
}
function log3(){
var x = "local";
var fn = eval
return fn("x")
}
function log4(