前端笔试套题-2
一.速答题
1.
var a = "baidu";
var b = 222;
var c = [1,2,3];
var e = function () {alert(111);};
var f = function () {this.name="22";};
alert(typeof a);
alert(typeof b);
alert(typeof c);
alert(typeof d);
alert(typeof e);
答案 string number object undefined function
2.
var a = new String("baidu.");
var b = new Number(222);
var c = new Array(222,4,2);
var e = function () {console.log(111);};
var f = function () {this.name="22"};
var h = new Error("foo");
console.log(a instanceof String);
console.log(b instanceof Number);
console.log(c instanceof String);
console.log(h instanceof Function);
console.log(e instanceof Number);
console.log(f instanceof String);
//答案:true true false false false false false
二.过程题
1.
if('a' in window) {
var a = 10;
}
alert(a);
答案:10
2.
var length = 10;
function fn() {
console.log(this.length);
}
var obj = {
length: 5,
method: function(fn) {
fn();
arguments[0]();
}
};
obj.method(fn, 1);
答案 10 2
3.
function fun(n,o) {
console.log(o)
return {
fun:function(m){
return fun(m,n);
}
};
}
var a = fun(0); a.fun(1); a.fun(2); a.fun(3);//undefined,?,?,?
var b = fun(0).fun(1).fun(2).fun(3);//undefined,?,?,?
var c = fun(0).fun(1); c.fun(2); c.fun(3);//undefined,?,?,?
问:三行a,b,c的输出分别是什么?
答案:undefined,0,0,0 undefined,0,1,2 undefined,0,1,1
4.
function A(){
}
function B(a){
this.a = a;
}
function C(a){
if(a){
this.a = a;
}
}
A.prototype.a = 1;
B.prototype.a = 1;
C.prototype.a = 1;
console.log(new A().a);
console.log(new B().a);
console.log(new C(2).a);
答案:
console.log(new A().a); //new A()为构造函数创建的对象,本身没有a属性,所以向它的原型去找,发现原型的a属性的属性值为1,故该输出值为1;
console.log(new B().a); //new B()为构造函数创建的对象,该构造函数有参数a,但该对象没有传参,故该输出值为undefined;
console.log(new C(2).a); //new C()为构造函数创建的对象,该构造函数有参数a,且传的实参为2,执行函数内部,发现if为真,执行this.a = 2,故属性a的值为2;
故这三个的输出值分别为:1、undefined、2.
三.简答应用题:
1.如何实现浏览器内多个标签页之间的通信?
答案:调用 localstorge、cookies 等本地存储方式
2.描述下CSS3里实现元素动画的方法
答案:略
3.请编写一个JavaScript函数 parseQueryString,它的用途是把URL参数解析为一个对象,如: var url = "http://www.baidu.com?key0=0&key1=1&key2=2"
function parseQueryString(url) {
var obj = {};
var a = url.split('?');
if(a === 1) return obj;
var b = a[1].split('&');
for(var i = 0, length = b.length; i < length; i++) {
var c = b[i].split('=');
obj[c[0]] = c[1];
}
return obj;
}
var url = 'http://witmax.cn/index.php?key0=0&key1=1&key2=2';
var obj = parseQueryString(url);
console.log(obj.key0, obj.key1, obj.key2); // 0 1 2
四. 逻辑题
有一天,某一珠宝店被盗走了一块贵重的钻石。经侦破,查明作案人肯定在甲、乙、丙、丁之中。于是,对这四个重大嫌疑犯进行审讯。审讯所得到的口供如下: 甲:我不是作案的。 乙:丁是罪犯。 丙:乙是盗窃这块钻石的罪犯。 丁:作案的不是我。 经查实:这四个人的口供中只有一个是假的。那么,以下哪项才是正确的破案结果? (A)甲作案。 (B)乙作案。 (C)丙作案。 (D)丁作案。 (E)甲、乙、丙、丁共同作案。
看4个人说话,乙跟丁是矛盾的,所以在他们两个之间选,直接用假设
假如是丁说谎,那丁就是罪犯,与丙说的谎矛盾,所以不是丁
假如是乙说谎,那就是甲不是,丁不是,丙说是乙那也应该是真的
答案是乙