本文整理了JavaScript相关的一些quiz(也就是难题,偏方之类),在实际的项目中,不会出现1..z之类的代码,不过这些quiz能够让你深刻了解这些写法背后的原因,如果你有什么好的quiz,可以在下面留言,翘首以待中。
下面的这些quiz,如果你不参阅相关资料(下面的说明和建议,仅供参考):
- 能够100%做对,说明你的基本功相当扎实,另外,师傅,请受徒儿一拜
- 做对70%以上,说明有一定的JavaScript基础,但还有一定的提升空间
- 做对40%以上,说明JavaScript掌握的还不够牢固,很多概念模棱两可
- 做对40%以下,那么我建议你仔细重温下如下书籍再来做一遍,这些书会让你如入桃花源,柳暗花明又一村
- 《JavaScript Patterns》
- 《JavaScript The Definitive Guide》
- 《Eloquent JavaScript》
- 《JavaScript The Good Parts》
- 《JavaScript Garden》
- 《Maintainable JavaScript》
- 还有更多,不过如果你好好消化了上面书籍的内容的话,你会发现,更多的书籍也只不过是内容的重复
关于arguments
// quiz-1:该IIFE返回什么结果?
// PS: IIFE(Immediately-Invoked Function Expression),即自调用函数、立即执行函数
(function(){
return typeof arguments;
})();
// quiz-2:该IIFE返回什么结果?
(function(){
return Object.prototype.toString.call(arguments).slice(8, -1);
})();
// quiz-3:该IIFE返回什么结果?
(function(){
return Object.prototype.toString.call([].slice.call(arguments)).slice(8, -1);
})(1,'2',new Date(),4);
// quiz-4:console.log输出什么?
function b (x, y, a) {
arguments[2] = 10;
console.log(a);
}
b(1,2,3);
// quiz-5:f()输出什么?
function f(x, y) {
x = 10;
console.log(
arguments[0],
arguments[1]
);
}
f();
关于函数表达式
// quiz-1:typeof g()结果为?
var f = function g() { return 42; };
typeof g();
// quiz-2:下面的IIFE返回什么?
(function(f){
return typeof f();
})(function(){ return 1; });
// quiz-3:typeof f的值?
var f = (function f() {
return '1';
}, function g() {
return 2;
})();
typeof f;
关于变量声明和运算顺序
// quiz-1:x的值?
var y = 1, x = y = typeof x;
x
// quiz-2:a的值?
var a = 1;
var b = function a (x) {
x && a(--x);
};
console.log(a);
// quiz-3:下面表达式的值?
(1, 5-1) * 2
// quiz-4:下面几条语句输出?
var b = 10,
c = (
20,
function(x) {return x + 100},
function() {return arguments[0]}
);
a = b + c
({x:10}).x
关于变量提升
// quiz-1:写出所有输出结果
var abc = 'global_var';
(function(){
console.log(typeof abc);
console.log(typeof fun_1);
console.log(typeof fun_2);
var abc = 'local_var';
function fun_1() {}
var fun_2 = function (){};
console.log(typeof abc);
console.log(typeof fun_1);
console.log(typeof fun_2);
})(window);
// quiz-2:x的值?
var x = 1;
if (function f(){}) {
x += typeof f;
}
x
// quiz-3:iife返回结果?
(function(){
function f() { return 1; }
return f();
function f() { return 2; }
})(window);
// quiz-4:a的值?
function a (x) {
return x * 2;
}
var a;
console.log(a);
// quiz-5:iife返回结果?
(function(){
a = function() { return 1; };
function a () {
return 2;
}
var a;
return a;
})(window);
关于delete运算符
// quiz-1:写出所有输出
var global_var = 1;
(function(x){
global_var_imply = '2';
var local_var = 3;
var arr = [1,2,3,4,5];
var obj = {x:1, y:2, z:3};
delete(global_var)
delete(global_var_imply)
delete(local_var)
delete(x)
delete(arr[2])
delete(obj.y)
console.log(typeof global_var);
console.log(typeof global_var_imply);
console.log(typeof local_var);
console.log(typeof x);
console.log(arr);
console.log(arr.length);
console.log(obj);
})(1);
关于this
// quiz-1:下面两个iife的返回结果?
var foo = {
bar: function () {
return this.baz;
},
baz: 1
};
(function(){
return typeof arguments[0]();
})(foo.bar);
(function(){
return typeof arguments[0].call(foo);
})(foo.bar);
// quiz-2:typeof返回结果?
var foo = {
bar: function () {
return this.baz;
},
baz: 1
};
typeof (f = foo.bar)();
// quiz-3:写出所有输出
var x = 10;
var foo = {
x: 20,
bar: function () {
var x = 30;
return this.x;
}
};
console.log(
foo.bar(),
(foo.bar)(),
(foo.bar = foo.bar)(),
(foo.bar, foo.bar)()
);
关于typeof
// quiz-1:写出下面几个typeof的结果 var x = [typeof x, typeof y][1]; typeof typeof x; typeof typeof(null); typeof foo == 'undefined'; typeof foo === 'undefined';
关于JSON对象
// quiz-1:iife的返回结果?
(function(foo){
return typeof foo.bar;
})({foo: {bar: 1}});
关于类和对象
// quiz-1:true or false?
function F() { return F; }
new F() instanceof F
// quiz-2:下面运行结果输出什么?
100.toString.length
100['toString']['length'];
100 .toString();
(100).toString();
1..z;
关于with
// quiz-1:输出结果
with (function(x, undefined){}) length
关于++
// quiz-1:result的值? var num1 = 5, num2 = 6, result = num1+++num2; result
关于作用域
// quiz-1:a的值?
if (!("a" in window)) {
var a = 1;
}
console.log(a);
关于setTimeout
// quiz-1:o.doIt()的输出?
var x = 5;
var o = {
x: 10,
doIt: function doIt() {
var x = 20;
var timer = setTimeout(
function() {
console.log(this.x);
},
10
);
}
};
o.doIt();
关于字符串和数字的比较和转换
// quiz-1:写出所有输出
var num1 = '10',
num2 = '9';
console.log(num1 < num2);
console.log(+num1 < num2);
console.log(num1 + num2);
console.log(+num1 + num2);
##关于字符串截断
// quiz-1:写出所有输出 var msg = 'Hello, world'; msg.substring(1,4) msg.substr(1,4) msg.slice(1,4)
关于valueOf和toString
// quiz-1:写出所有输出
var obj = {
x: 8,
valueOf: function() {
return this.x + 2;
},
toString: function() {
return this.x.toString();
}
};
console.log(obj + 1);
obj < "9"
关于parseInt
// quiz-1:两个parseInt的值?
parseInt('06')
parseInt('08')
关于对象初始化
// quiz-1:函数执行结果?
({
x: 10,
foo: function () {
function bar() {
console.log(x);
console.log(y);
console.log(this.x);
}
with (this) {
var x = 20;
var y = 30;
bar.call(this);
}
}
}).foo();
关于正确答案,唔…,先卖个关子,亲,不会让你们久等的。