原文网址:http://javascript-puzzlers.herokuapp.com/
本文是题目来自以上网址
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 为基数。
A [“object”,false] B [null,false] C [“object”,true] D other
选A null 类型是一个对象,typeof 是显示null的类型,但null与object本质不是一个数据类型 null instanceof Object为false
A an error B[9,0] C[9,NaN] D[9,undefined]
选 A [9,报错] 解析:[2,3].reduce(Math.pow)=2^3=8
var val = ‘smtg’;
console.log(‘Value is ’ + (val === ‘smtg’) ? ‘Something’ : ‘Nothing’);
答: Something 解析:’Value is ’ + (val === ‘smtg’)为string为true, 所以打印Something
var name = 'World!'; (function () { if (typeof name === 'undefined') { var name = 'Jack'; console.log('Goodbye ' + name); } else { console.log('Hello ' + name); } })();
答:Goodbye Jack 解析:if中也存在变量申明提前
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
var ary = [0,1,2]; ary[10] = 10; ary.filter(function(x) { return x === undefined;});
答: [ ] 解析:filter会直接跳过数组不存在值的部分,所以值符合要求
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
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’)是新对象
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
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
parseInt(3, 8)
parseInt(3, 2)
parseInt(3, 0)
答:[3,NaN,3] 上面讲过
答: true 数组原型也是数组
var a = [0]; if ([0]) { console.log(a == true); } else { console.log("wut"); }
答: false 解析:在if([0])中作为布尔值为true,[0]==true中作为0是false
答: false 不好解析 知乎解析:https://www.zhihu.com/question/29615998
‘5’ + 3
‘5’ - 3
答: ‘53’,2 ‘+’使3转为字符串,但’-‘使字符串转为数字 exp:-‘223’ 为-223
答: 2 貌似没啥玄机的 1 + - + + + - + - 1为0就看最后的符号是加还是减
var ary = Array(3); ary[0]=2 ary.map(function(elem) { return '1'; });//?返回的数组是?
答:[1, , ] 解析:map函数会跳过没有值的部分
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。
b=1111;
a + b;
答 111111111111111110000 解析:js中的精度问题影响了小数和大数,但是如果b = 111111111111111111111;那么结果a+b为222222222222222230000
x();
答:window 查的解析: [] .reverse将返回此值,如果没有显式接收器对象调用,它将默认为默认的此AKA窗口
答: true 解析 Number的最小值大于0
答: [true,true] true为1,false为0
答:true 解析两边都被转为字符串
3.toString() 3..toString() 3...toString()
答: error,”3”,error
(function(){ var x = y = 1; })(); console.log(y); console.log(x);
答: 1,error y是全局的要注意
var a = /123/, b = /123/; a == b a === b
答:false,false 解析:匹配对象不相等