解析js面试题(上)

本文作者通过解析一系列JavaScript面试题,包括类型转换、函数参数、对象实例检测、数组操作等方面,深入探讨JavaScript语言的细节和陷阱。例如,`parseInt`函数的基数参数、`null`的实例检测、空数组调用方法的行为、浮点数计算误差等。文章旨在帮助读者巩固JS基础知识,理解潜在的易错点。
摘要由CSDN通过智能技术生成

注:本篇博客的题目出自于博主,小平果118博客,题目地址:http://blog.csdn.net/i10630226/article/details/49765737,由于该博客并没有抛出来来答案和解析,我在这里以自己的理解来做一下这些题目。欢迎大家与我交流!下面进入正题,来看题目:

1,以下表达式的运行结果是:

["1","2","3"].map(parseInt)

A.["1","2","3"]

B.[1,2,3]

C.[0,1,2]

D.其他 

这道题考的非常细致,答案应该是 D ,输出的为[1, NaN, NaN]
解析:这道题我们需要注意的parseInt函数的参数,这个函数的参数有两个,一个是必须参数,也就是需要被解析的字符串;另一个是数字基数,是一个可选参数,如果我们传入的是0或者不传入的话,默认以十进制来解析,如果该参数小于 2 或者大于 36 ,则 parseInt() 将返回 NaN
下面来看我们的题目,首先会是parseInt("1", 0),正如我们以上所说以十进制来进行解析,所以就得到1,然后是parseInt("2", 1),由于基数小于 2 ,返回的就是NaN,最后是parseInt("3", 2),由于二进制的每位最大值只能够为 1 ,所以已二进制的形式来解析,显然也是错误的。
我们现在对题主给的这个函数做一下改变["1","2","3"].map(parseFloat)的话,我们会得到的是[1, 2, 3],这是因为我们的parseFloat的参数只有一个,那就是被解析的字符串
我们从这题可以看出parseFloatparseInt的区别:
1. 前者返回一个浮点数;后者返回一个整数
2. 前者只能在十进制下解析,只有一个参数;后者可以在二进制到三十六进制下进行解析,有两个参数。

2,以下表达式的运行结果是:

[typeof null, null instanceof Object]

A.["object",false]

B.[null,false]

C.["object",true]

D.其他

这题主要考的是null,答案为 B
解析: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]

这题,答案为 A
解析:因为调用空数组不带默认参数地调用reduce()方法会报错,当只有一个元素的时候(数组只有一个元素,且没有初始参数;数组为空,但是含有初始参数),reduce()方法只会简单的返回这个数值,而不会调用化简操作,但是我仍然需要知道一下前面的那个值为什么为 9 ,我们第一次调用函数时,第一个参数为初始值,假若没有初始值的话,则将数组的第一个元素作为初始值,我们第一次传入的参数就为 3,2 ,计算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值