解析js面试题(上)
2016-05-05 14:06
501 查看
注:本篇博客的题目出自于博主,小平果118博客,题目地址:/article/2242847.html,由于该博客并没有抛出来来答案和解析,我在这里以自己的理解来做一下这些题目。欢迎大家与我交流!下面进入正题,来看题目:
1,以下表达式的运行结果是:
这道题考的非常细致,答案应该是DD,输出的为
解析:这道题我们需要注意的
下面来看我们的题目,首先会是
我们现在对题主给的这个函数做一下改变
我们从这题可以看出
1. 前者返回一个浮点数;后者返回一个整数
2. 前者只能在十进制下解析,只有一个参数;后者可以在二进制到三十六进制下进行解析,有两个参数。
2,以下表达式的运行结果是:
这题主要考的是
解析:
然而
3,以下表达式的运行结果是:
这题,答案为AA
解析:因为调用空数组不带默认参数地调用
4,以下表达式的运行结果是:
这题答案是AA,没有什么好解释的只有空字符串转化为
5,以下表达式的运行结果是:
这题答案为AA,主要为变量提前声明,在es2015中的
6,以下表达式的运行结果是:
答案是DD,因为在js中可以允许的最大数值为2532^{53},大于2532^{53}的整数计算不能确保正确,但不一定总不正确,$,如:
7,以下表达式的运行结果是:
这题答案为CC,因为
8,以下表达式的运行结果是:
这题答案为CC,计算机在计算浮点数时有一个小bug,具体的详情可以参考我之前的博客:/article/9772887.html
9,以下表达式的运行结果是:
答案为:CC,因为
10,以下表达式的运行结果是:
答案为AA,将字符串强制类型转换为字符串,所以满足
11,以下表达式的运行结果是:
答案为CC,
12,以下表达式的运行结果是:
答案为DD,我们得到的输出结果为
13,以下表达式的运行结果是:
答案为AA,因为我们的
14,以下表达式的运行结果是:
A.true
B.false
C.”else”
D.其他
答案为BB,我们需要清楚的是在
15,以下表达式的运行结果是:
答案为BB,在js中两个对象是永远不可能相等的,因为对象是引用类型,其意义等同于指针,正如题目中的两个空数组那样,虽然都是空数组,但是它们在内存中的地址并不同,所以值,也就是指针肯定不同。
16,以下表达式的运行结果是:
答案为AA,老生常谈的问题,字符串与数值进行++操作时,会将
17,以下表达式的运行结果是:
如果题目是长成这个样的话,那么会报错,答案也就是DD,但是假如题目是:
那么输出结果为22,为什么会为22呢?这表达式运算符之间存在空格,也就是说上面的表达式相当于
18,以下表达式的运行结果是:
答案为DD,输出的应该为
19,以下表达式的运行结果是:
答案为DD,其结果为2121。
20,以下表达式的运行结果是:
答案为BB,像我们之前第六题那样,变量
21,以下表达式的运行结果是:
答案为DD,首先我们知道用数组的
所以我们可以确认的是,我们的
22,以下表达式的运行结果是:
答案为AA,
1,以下表达式的运行结果是:
["1","2","3"].map(parseInt) A.["1","2","3"] B.[1,2,3] C.[0,1,2] D.其他
这道题考的非常细致,答案应该是DD,输出的为
[1, NaN, NaN]
解析:这道题我们需要注意的
parseInt函数的参数,这个函数的参数有两个,一个是必须参数,也就是需要被解析的字符串;另一个是数字基数,是一个可选参数,如果我们传入的是0或者不传入的话,默认以十进制来解析,如果该参数小于 22 或者大于 3636,则
parseInt()将返回
NaN。
下面来看我们的题目,首先会是
parseInt("1", 0),正如我们以上所说以十进制来进行解析,所以就得到
1,然后是
parseInt("2", 1),由于基数小于22,返回的就是
NaN,最后是
parseInt("3", 2),由于二进制的每位最大值只能够为11,所以已二进制的形式来解析,显然也是错误的。
我们现在对题主给的这个函数做一下改变
["1","2","3"].map(parseFloat)的话,我们会得到的是
[1, 2, 3],这是因为我们的
parseFloat的参数只有一个,那就是被解析的字符串。
我们从这题可以看出
parseFloat与
parseInt的区别:
1. 前者返回一个浮点数;后者返回一个整数
2. 前者只能在十进制下解析,只有一个参数;后者可以在二进制到三十六进制下进行解析,有两个参数。
2,以下表达式的运行结果是:
[typeof null, null instanceof Object] A.["object",false] B.[null,false] C.["object",true] D.其他
这题主要考的是
null,答案为BB
解析:
null只是一个空指针引用,个人的认知是
typeof返回的只是基础数据类型,也就是
Number,Null,Undefined,Boolean,String,Symbol,Object,在
js中属于
typeof null返回
object可以说是一个历史错误,没有什么为什么,它就是这样。
然而
instanceof却是十分有意思,其目的是检测一个对象是不是为另一个对象的实例,由于
null只是一个空指针引用,所以
null肯定不是有
new Object()得到的,所以返回的
false。
3,以下表达式的运行结果是:
[[3,2,1].reduce(Math.pow),[].reduce(Math.pow)] A.报错 B.[9,0] C.[9,NaN] D.[9,undefined]
这题,答案为AA
解析:因为调用空数组不带默认参数地调用
reduce()方法会报错,当只有一个元素的时候(数组只有一个元素,且没有初始参数;数组为空,但是含有初始参数),
reduce()方法只会简单的返回这个数值,而不会调用化简操作,但是我仍然需要知道一下前面的那个值为什么为99,我们第一次调用函数时,第一个参数为初始值,假若没有初始值的话,则将数组的第一个元素作为初始值,我们第一次传入的参数就为3,23,2,计算323^2得出99,第二次传入的为第一次化简函数返回的值和数组下一个位置的值,也就是9,19,1,所以最终输出99。
4,以下表达式的运行结果是:
var val = 'value'; console.info('Value id '+(val === 'value')?'Something':'Nothing'); A.Something B.Nothing C.NaN D.其他
这题答案是AA,没有什么好解释的只有空字符串转化为
Boolean类型时为
false
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
这题答案为AA,主要为变量提前声明,在es2015中的
let,const并不会发生这种现象。
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); A.0 B.100 C.101 D.其他
答案是DD,因为在js中可以允许的最大数值为2532^{53},大于2532^{53}的整数计算不能确保正确,但不一定总不正确,$,如:
Math.pow(2, 53) + 1 === Math.pow(2, 53)返回值为true,所以我们写的那个就是一个死循环。
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]
这题答案为CC,因为
fliter()方法会跳过稀疏数组中缺少的元素,所以中间的那些未定义就直接被跳过了,这也是数组某位置值为
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.其他
这题答案为CC,计算机在计算浮点数时有一个小bug,具体的详情可以参考我之前的博客:/article/9772887.html
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')); A.Case A B.Case B C.Do not know D.undefined
答案为:CC,因为
case的条件分支视为判断
===,引用类型的
String与基本类型的
String由于类型不同,所以走的是
default分支
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
答案为AA,将字符串强制类型转换为字符串,所以满足
===,值等类型等。
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]
答案为CC,
-9 % 2余下的为
-1,
Infinity % 2得到的是
NaN
12,以下表达式的运行结果是:
[parseInt(3,8),parseInt(3,2),parseInt(3,0)] A.[3,3,3] B.[3,3,NaN] C.[3,NaN,NaN] D.其他
答案为DD,我们得到的输出结果为
[3, NaN, 3],关于
parseInt请参见第一题的解析。
13,以下表达式的运行结果是:
Array.isArray(Array.prototype) A.true B.false C.报错 D.其他
答案为AA,因为我们的
Array.prototype就是一个
[]。
14,以下表达式的运行结果是:
var a = [0]; if([0]){ console.info(a == true); }else{ console.info("else"); }
A.true
B.false
C.”else”
D.其他
答案为BB,我们需要清楚的是在
if条件判断中会调用我们的强制类型转换,将其转换为
boolean类型值,也就是说
if条件判断中相当于对于条件进行
Boolean(条件内容),但是对于
==来说,只是来进行值类型的比较,我们的
[0]拿到的是其值,也就是
0,这样显然不等于
true。
15,以下表达式的运行结果是:
[]==[] A.true B.false C.报错 D.其他
答案为BB,在js中两个对象是永远不可能相等的,因为对象是引用类型,其意义等同于指针,正如题目中的两个空数组那样,虽然都是空数组,但是它们在内存中的地址并不同,所以值,也就是指针肯定不同。
16,以下表达式的运行结果是:
[('5'+3),('5'-3)] A.["53",2] B.[8,2] C.报错 D.其他
答案为AA,老生常谈的问题,字符串与数值进行++操作时,会将
number类型转换为
string类型,进行−-操作时,会将
string类型转换为
number类型。
17,以下表达式的运行结果是:
1+-+++-+1 A.true B.false C.报错 D.其他
如果题目是长成这个样的话,那么会报错,答案也就是DD,但是假如题目是:
1 + - + + + - + 1
那么输出结果为22,为什么会为22呢?这表达式运算符之间存在空格,也就是说上面的表达式相当于
1 + "" - "" + "" + "" + "" - "" + 1,在结合我在十六题时所说,很容易就能算出。
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.其他
答案为DD,输出的应该为
["1", ,],
map方法与我们之前所看到的
filter方法一样,会跳过缺失的元素,所以稀疏数组经过
map处理后仍然为稀疏数组。
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.其他
答案为DD,其结果为2121。
20,以下表达式的运行结果是:
var a = 111111111111111110000; b = 1111; console.info(a+b); A.111111111111111111111 B.111111111111111110000 C.NaN D.Infinity
答案为BB,像我们之前第六题那样,变量
a的值已经超过了
Math.pow(2, 53),所以容易产生精度丢失问题。
21,以下表达式的运行结果是:
ar x = [].reverse; x(); A.[] B.undefined C.报错 D.window
答案为DD,首先我们知道用数组的
reverse方法操作数组,数组将会被改变,可以出名
reverse是操作
this,并且返回
this,如:
[].reverse.call(new Boolean(true)); bool对象 [].reverse.call(new Number(23)); number对象
所以我们可以确认的是,我们的
reverse,将
[].reverse赋值给一个全部变量
x,所以调用我们的
x时相当于
window.x,所以
this也就指向
window了。
22,以下表达式的运行结果是:
Number.MIN_VALUE>0 A.true B.false C.报错 D.其他
答案为AA,
Number.MIN_VALUE表示的一个无限接近于0的数字,值约为5∗10−3245*10^{-324}。
相关文章推荐
- 《java入门第一季》之面向对象面试题
- 《java入门第一季》之面向对象面试题
- 程序员如何在职场中实现“跨越式”成长?
- 《java入门第一季》之面向对象面试题(继承中构造方法的关系)
- 《java入门第一季》之面向对象面试题(继承中构造方法的关系)
- 《java入门第一季》之面向对象面试题(this和super的区别)
- 《java入门第一季》之面向对象面试题(this和super的区别)
- Java笔试面试题整理第五波
- 程序员面试基础
- iOS 面试题
- 剑指offer-面试题61:按之字形顺序打印二叉树
- 在职场,我见过的8种黄金思维
- 面试之路(24)-提高代码的规范性,完整性,错误处理
- 面试之路(24)-提高代码的规范性,完整性,错误处理
- 面试之路(24)-提高代码的规范性,完整性,错误处理
- 面试题13
- 给新人程序员的八点建议 转载
- 未入门程序员的一点心得
- 面试精选:链表问题集锦
- 面试感悟----一名3年工作经验的程序员应该具备的技能