27道js题

开始

原文网址:http://javascript-puzzlers.herokuapp.com/
本文是题目来自以上网址

题目列表

1. [“1”, “2”, “3”].map(parseInt)

A [“1”,”2”,”3”] B [1,2,3] C [0,1,3] D other

选D ohter 也就是 [1,NaN,NaN] 解析:parseInt(“字符串”,redix),redix表示要解析的数字的基数。该值介于 2 ~ 36 之间,也就是进制数;map函数传入3个参数(item,index,array) ,所以[parseInt(“1”,0), parseInt(“1”,1) ,parseInt(“1”,2) ] 当redix为0时,默认十进制,如果它以 “0x” 或 “0X” 开头,将以 16 为基数。

2. [typeof null, null instanceof Object]

A [“object”,false] B [null,false] C [“object”,true] D other

选A null 类型是一个对象,typeof 是显示null的类型,但null与object本质不是一个数据类型 null instanceof Object为false

3. [ [3,2,1].reduce(Math.pow), [].reduce(Math.pow) ]

A an error B[9,0] C[9,NaN] D[9,undefined]

选 A [9,报错] 解析:[2,3].reduce(Math.pow)=2^3=8

4.

var val = ‘smtg’;
console.log(‘Value is ’ + (val === ‘smtg’) ? ‘Something’ : ‘Nothing’);

答: Something 解析:’Value is ’ + (val === ‘smtg’)为string为true, 所以打印Something

5.

var name = 'World!';
(function () {
    if (typeof name === 'undefined') {
        var name = 'Jack';
        console.log('Goodbye ' + name);
    } else {
        console.log('Hello ' + name);
    }
})();

答:Goodbye Jack 解析:if中也存在变量申明提前

6.

var END = Math.pow(2, 53);
var START = END - 100;
var count = 0;
for (var i = START; i <= END; i++) {
count++;
};
console.log(count);

答:count 会进入一个无限循环 2^53过大,START不管怎么加一都等于END

7.

var ary = [0,1,2];
ary[10] = 10;
ary.filter(function(x) { return x === undefined;});

答: [ ] 解析:filter会直接跳过数组不存在值的部分,所以值符合要求

8.

var two   = 0.2
var one   = 0.1
var eight = 0.8
var six   = 0.6
以下结果为?
[two - one == one, eight - six == two]

答:[true,false] 解析:浮点数问题two - one=0.1 0.8-0.6=0.20000000000000007 0.1+0.2=0.30000000000000004

9.

function showCase(value) {
    switch(value) {
    case 'A':
        console.log('Case A');
        break;
    case 'B':
        console.log('Case B');
        break;
    case undefined:
        console.log('undefined');
        break;
    default:
        console.log('Do not know!');
    }
}
showCase(new String('A'));

答: ‘Do not know!’ 解析:switch使用的是===, new String(‘A’)是新对象

10.

function showCase2(value) {
    switch(value) {
    case 'A':
        console.log('Case A');
        break;
    case 'B':
        console.log('Case B');
        break;
    case undefined:
        console.log('undefined');
        break;
    default:
        console.log('Do not know!');
    }
}
showCase2(String('A'));

答: 没啥好说的 Case A

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);//?返回数组是?

答 [true,,true,true,false,false] 解析: -9%2为-1,’13’%2会自动转为Number,Infinity%2 为NaN

12.

parseInt(3, 8)
parseInt(3, 2)
parseInt(3, 0)
答:[3,NaN,3] 上面讲过

13. Array.isArray( Array.prototype )

答: true 数组原型也是数组

14.

var a = [0];
if ([0]) {
  console.log(a == true);
} else {
  console.log("wut");
}

答: false 解析:在if([0])中作为布尔值为true,[0]==true中作为0是false

15. []==[]

答: false 不好解析 知乎解析:https://www.zhihu.com/question/29615998

16.

‘5’ + 3
‘5’ - 3
答: ‘53’,2 ‘+’使3转为字符串,但’-‘使字符串转为数字 exp:-‘223’ 为-223

17. 1 + - + + + - + 1

答: 2 貌似没啥玄机的 1 + - + + + - + - 1为0就看最后的符号是加还是减

18.

var ary = Array(3);
ary[0]=2
ary.map(function(elem) { return '1'; });//?返回的数组是?

答:[1, , ] 解析:map函数会跳过没有值的部分

19.

function sidEffecting(ary) {
  ary[0] = ary[2];
}
function bar(a,b,c) {
  c = 10
  sidEffecting(arguments);
  return a + b + c;
}
bar(1,1,1)

答:21 解析:在sidEffecting(arguments);输入console.log(arguments);你会发现打印出{ ‘0’: 10, ‘1’: 1, ‘2’: 10 },
arguments对象是参数的集合,类似数组但又不是数组,在bar函数中可以初步认为变化3次,arguments输入时为{‘0’:1,’1’:1,’2’:10}经过sidEffecting函数{ ‘0’: 10, ‘1’: 1, ‘2’: 10 }所以a=10,b=1,c=10。

20. var a = 111111111111111110000,

b=1111;

a + b;
答 111111111111111110000 解析:js中的精度问题影响了小数和大数,但是如果b = 111111111111111111111;那么结果a+b为222222222222222230000

21. var x = [].reverse;

x();
答:window 查的解析: [] .reverse将返回此值,如果没有显式接收器对象调用,它将默认为默认的此AKA窗口

22. Number.MIN_VALUE > 0

答: true 解析 Number的最小值大于0

23. [1 < 2 < 3, 3 < 2 < 1]

答: [true,true] true为1,false为0

24. 2 == [[[2]]]

答:true 解析两边都被转为字符串

25.

3.toString()
3..toString()
3...toString()

答: error,”3”,error

26.

(function(){
  var x = y = 1;
})();
console.log(y);
console.log(x);

答: 1,error y是全局的要注意

27.

var a = /123/,
    b = /123/;
a == b
a === b

答:false,false 解析:匹配对象不相等

你可能感兴趣的:(javascript)