30个你 “ 不可能全部会做 ” 的javascript题目

来源:互联网 发布:股票大智慧软件下载 编辑:程序博客网 时间:2024/05/18 21:39
1,以下表达式的运行结果是:
["1","2","3"].map(parseInt)
A.["1","2","3"]
B.[1,2,3]
C.[0,1,2]
D.其他
==============答案:D,parseInt第二个参数范围是:2-32,如果传入0,则默认按照10处理。请自己查看parseInt函数定义

2,以下表达式的运行结果是:
[typeof null, null instanceof Object]
A.["object",false]
B.[null,false]
C.["object",true]
D.其他

================答案:A,关于instanceof的深入讲解请参考:http://www.ibm.com/developerworks/cn/web/1306_jiangjj_jsinstanceof/

3,以下表达式的运行结果是:
[[3,2,1].reduce(Math.pow),[].reduce(Math.pow)]
A.报错
B.[9,0]
C.[9,NaN]
D.[9,undefined]

===================答案:A,空数组用reduce会报错,因为reduce在没有传入initValue时,会使用数组第一个元素做initValue,但是空数组没有第一个元素
4,以下表达式的运行结果是:
var val = "value";
console.info("Value id "+(val === "value")?"Something":"Nothing");
A.Something
B.Nothing
C.NaN
D.其他

===========答案:A,JS的比较分为两种,值类型比较和引用类型比较。值类型只比较值相等
5,以下表达式的运行结果是:
var name = "World";
(function(){
if(typeof name === "undefined"){
var name = "Jack";
console.info("Goodbye "+ name);
}else{
console.info("Hello " + name);
}
})();
A.Goodbye Jack
B.Hello Jack
C.Goodbye undefined
D.Hello undefined

=============答案:A,JS的变量作用于只有全局和函数级别,然后var声明的变量会有一个hoisting的过程
6,以下表达式的运行结果是:
var START = END -100;
var count = 0;
for(var i = START ; i <= END ;i++){
count ++;
}
console.info(count);
A.0
B.100
C.101
D.其他
================答案:D,会报错,END未定义

7,以下表达式的运行结果是:
var arr = [0,1,2];
arr[10] = 10;
arr.filter(function(x){return x === undefined});
A.[undefined x 7]
B.[0,1,2,10]
C.[]
D.[undefined]

=============答案:C,filter不会处理数组中undefined的元素
8,以下表达式的运行结果是:
var two = 0.2;
var one = 0.1;
var eight = 0.8;
var six = 0.6;
[two -one == one,eight- six == two];
A.[true,true]
B.[false,false]
C.[true,false]
D.其他

==========答案:C,不知道为啥。结果为0.1和0.2浮点数会有区别?求解答
9,以下表达式的运行结果是:
function showCase(value){
switch(value){
case "A":
console.info("Case A");
break;
case "B":
console.info("Case B");
break;
case undefined :
console.info("undefined");
break;
default:
console.info("Do not know!");
}}
showCase(new String("A"));
A.Case A
B.Case B
C.Do not know
D.undefined

=============答案:C,switch使用===进行比较
10,以下表达式的运行结果是:
function showCase(value){
switch(value){
case "A":
console.info("Case A");
break;
case "B":
console.info("Case B");
break;
case undefined :
console.info("undefined");
break;
default:
console.info("Do not know!");
}}
showCase(String("A"));
A.Case A
B.Case B
C.Do not know
D.undefined

=============和上题重复
11,以下表达式的运行结果是:
function isOdd(num){
return num % 2 == 1;
}
function isEven(num){
return num % 2 == 0;
}
function isSane(num){
return isEven(num)||isOdd(num);
}
var values = [7,4,"13",-9,Infinity];
values.map(isSane);
A.[true,true,true, true,true]
B.[true,true,true,true,false]
C.[true,true,true,false,false]
D.[true,true,false,false,false]

===================答案:C,负数求余为负数
12,以下表达式的运行结果是:
[parseInt(3,8),parseInt(3,2),parseInt(3,0)]
A.[3,3,3]
B.[3,3,NaN]
C.[3,NaN,NaN]
D.其他

============答案:D,[3, NaN, 3],参考第一题解答
13,以下表达式的运行结果是:
Array.isArray(Array.prototype)
A.true
B.false
C.报错
D.其他

==================答案:A

14,以下表达式的运行结果是:
var a = [0];
if([0]){
console.info(a == true);
}else{
console.info("else");
}
A.true
B.false
C."else"
D.其他
==============答案:B,数组是引用类型,用==比较是否是同一个对象

15,以下表达式的运行结果是:
[]==[]
A.true
B.false
C.报错
D.其他

============答案:B,参考上一题

16,以下表达式的运行结果是:
[("5"+3),("5"-3)]
A.["53",2]
B.[8,2]
C.报错
D.其他

==============答案:A,无需解释

17,以下表达式的运行结果是:
1+-+++-+1
A.true
B.false
C.报错
D.其他
==============答案:C,变态的题
18,以下表达式的运行结果是:
var arr = Array(3);
arr[0] = 2
arr.map(function(elem){return "1";});
A.[2,1,1]
B.["1","1","1"]
C.[2,"1","1"]
D.其他

===============答案:D,map不处理undefined的元素。结果应该是:["1",undefined,undefined]
19,以下表达式的运行结果是:
function sidEffecting(arr){
arr[0] = arr[2];
}
function bar(a,b,c){
c = 10;
sidEffecting(arguments);
return a+b+c;
}
bar(1,1,1);
A.3
B.12
C.报错
D.其他

=============答案:21,自己想去

20,以下表达式的运行结果是:
var a = 111111111111111110000;
b = 1111;
console.info(a+b);
A.111111111111111111111
B.111111111111111110000
C.NaN
D.Infinity

===================答案:B,不知道具体原因,猜测整数越界?
21,以下表达式的运行结果是:
ar x = [].reverse;
x();
A.[]
B.undefined
C.报错
D.window

=================答案:C,自己用浏览器试试就知道原因了
22,以下表达式的运行结果是:
Number.MIN_VALUE>0
A.true
B.false
C.报错
D.其他

=================答案:A
23,以下表达式的运行结果是:
[1<2<3,3<2<1]
A.[true,true]
B.[true,false]
C.报错
D.其他

===============答案:A,考查比较符结合性,以及true和整型的比较
24,以下表达式的运行结果是:
2 == [[[2]]]
A.true
B.false
C.undefined
D.其他

===================答案:A, [[[2]]].toString() 是“2”,相当于不断的调用数组的join方法,2==“2”就不用说了吧
25,以下表达式的运行结果是:
[3.toString(),3..toString(),3...toString()]
A.["3",error,error]
B.["3","3.0",error]
C.[error,"3",error]
D.其他

===============答案:C,在Number类型上调用方法需要写两个点,因为你写一个点会被解析成浮点数
26,以下表达式的运行结果是:
(function(){
var x1 =y1 =1;
})();
console.info(y1);
console.info(x1);
A.1,1
B.error,error
C.1,error
D.其他

====================答案:C,y1相当于定义在了window上
27,列举IE和FF脚本兼容性的问题
28,以下函数有什么问题?如何改进?
function initButtons(){
var body = document.body,button,i;
for(i =0;i<5;i++){
button = document.createElement("button");
button.innerHTML = "Button" + i;
button.addEventListener("click",function(e){
alert(i);
2015,false);
body.appendChild(button);
}
}
initButtons();

================闭包问题,注意闭包持有的是变量,不是变量的值,所以执行时alert都是4
29,写一段代码,判断一个字符串中出现次数最多的字符,并统计出现的次数。
var str="aswerwsdfsfs",result={'ch':'','num':-1},
str.split("").forEach(function(c,k){
!!result[c] ? result[c]++ : (result[c] = 1);
(result[c] > result[num]) && (result[ch] = c);
})
console.log(result)

===============================
30,请问一下两段代码有什么不同?
setTimeout(function(){
/*代码块*/
setTimeout(arguments.callee,10);
},10);
setInterval(function(){
/*代码块*/
},10);
题目摘自《超实用的javascript代码段》
0 0
原创粉丝点击