一.(2014阿里巴巴校招在线笔试)
题目:请选择出前端页面开发,执行javascript代码alert(1)的代码:
1.<iframe src="javascript:alert(1);"></iframe>
2.<img src=""/onerror=alert(1);>
3.<s style="top:expression(alert(1))"></s>
4.<div onclick="alert(1)"></div>
分析:事实证明1,2,3都可以,just try...
1 <!DOCTYPE html> 2 <html lang="zh"> 3 <head> 4 <meta charset=utf-8> 5 <title>demo</title> 6 </head> 7 <style> 8 9 </style> 10 11 <body> 12 <!-- 成功alert(1) --> 13 <!-- <iframe src="javascript:alert(1);"></iframe> --> 14 <!-- 成功alert(1) --> 15 <!-- <img src=""/onerror=alert(1);> --> 16 <!-- ie下兼容性视图成功alert(1) --> 17 <!-- <s style="top:expression(alert(1))"></s> --> 18 <!-- 没有alert(1) --> 19 <div onclick="alert(1)"></div> 20 21 22 </body> 23 </html>
二、(2014阿里巴巴校招在线笔试)
题目:请指出以下哪些是ECMAScript5新增的特性:
1.Object.hasOwnProperty()
2.Object.create
3.Object.preventExtensions
4.Object.isExtensible
分析:资料表明,2,3,4都是新增的特性;
这个题目充分的说明了,我们要关注新的东西喔~~~
参考资料:http://blog.csdn.net/kabukon/article/details/6913381
三、下面代码会返回什么
(function(){ return typeof arguments; })();
分析:
arguments是实参集合,有数组长度,没有数组方法,typeof会返回对象。
于是乎,上面的代码会返回“object”。
四、看下面代码
1 var f = function g(){return 23;}; 2 typeof g();
分析:
这里面的表达式是有名函数表达式,不规范,g()只能在函数内部访问。
typeof就会Error。
五、下面代码return会返回什么
1 (function(x){ 2 delete x; 3 return x; 4 })(1);
分析:
delete不能删除变量和参数,只能删除对象下面的属性,因此return还是会返回1。
六、下面代码中的 x
1 var y=1,x=y=typeof x; 2 x;
分析:
后面表达式是从右向左执行的,typeof返回的都是字符串类型,最先运算的是typeof x,因为他先是‘undefined‘所以赋给了y,y再赋给x,于是乎最后就是‘undefined‘了。
七、下面函数会返回什么
1 (function f(f){ 2 return typeof f(); 3 })(function(){return 1;});
分析:
相当于typeof 1 然后会返回 ‘number‘
八、下面代码会返回什么:
1 var foo = { 2 bar:function(){return this.baz;}, 3 baz:1 4 } ; 5 (function(){ 6 return typeof arguments[0](); 7 })(foo.bar);
分析:
先看个例子:
1 function test(){ 2 alert(this); 3 }
其实这样写的话这里面的this根本就是不确定的,也就不会弹窗,this指向哪要看在哪调用。
像这样写:
1 var arr = [1,2,3]; 2 arr.test = test; 3 arr.test();
就会弹窗数组了喔。
所以,本题中,foo中的this指向是不明确的,要看调用的地方,向foo.bar这样调用的话this是会指向foo的,但是foo.bar是整体作为参数传进去的,arguments[0]就相当于foo.bar,整体都作为函数名了,于是 arguments[0]()这种调用方式就相当于
function test(){
alert(this);
}
上面说的这种调用方式了,也就是说this指向window了,window中没有baz,于是就会
会返回‘undefined‘了。
九、下面的typeof f 会得到什么:
1 var f = (function f(){return "1";},function f(){return 2})(); 2 typeof f;
分析:
这里面首先有了分组选择符,我们先看看什么事分组选择符吧:
正常来说 var a = 1; 那么a就是1,但是如果这样写 var a = (1,2,3); 那么a就是3了,分组选择符执行最后一位。
于是就执行分组选择符后面那个return 2的函数了,于是typeof f就是 ‘number‘。
十、看下面代码中的x
1 var x =1; 2 if(function f(){}){ 3 x += typeof f; 4 } 5 x;
分析:
function f(){}这样的函数必须是全局的或者是局部的,是不能写在运算里面的,于是下面f找不到 typeof f返回‘undefined‘,f虽然找不到,但是在if里面还是会返回真。于是变成了运算1+‘undefined‘,然后就会返回‘1undefined‘了。
十一、
1 var x= [typeof x,typeof y][1]; 2 typeof typeof x;
分析:
很迷惑,其实根本不用管第一个表达式。typeof返回的必然是个字符串,于是typeof一个字符串了,于是就返回‘string‘。
十二、看下面的代码
1 (function(foo){ 2 return typeof foo.bar; 3 })({foo:{bar:1}});
分析:
其实这里面的foo并不是指后面传进的参数中的foo,而是指整个参数{foo:{bar:1}}这个对象,但是这个对象中根本不存在bar属性,所以就会返回‘undefined‘了。
十三、下面代码会return什么
(function f(){ function(){return 1;} return f(); function(){return 2;} })();
分析:
函数声明预解析,后面函数已经把前面的覆盖掉了于是在执行f()的时候就是后面那个函数了,于是就返回2了。
十四、看下面代码
1 function f(){return f;} 2 new f() instanceof f;
分析:
只看后面的表达式的话new f()就是构造函数生成的对象然后他去instanceof构造函数,然后就返回true了。但是有return f 于是f覆盖掉new f()这个生成的对象了,于是就变成了f instanceof f了,然后就会返回false了。
十五、
1 with (function(x,undefined){}).length;
分析:
函数的长度(length)就是函数的形参,而arguments是函数的实参集合。
比如说这样的
function test(num1,num2,num3){}
alert(test.length);
就会弹出3
同理,本题就会得到2.