网站首页 > 技术文章 正文
前言
今天这篇文章整理了几道常见的Javascript笔试题,这些题目看似简单,但一不注意就会出错,来看看你都会做吗?
Javascript
题目1-typeof和instanceof
我们都知道typeof是用于检测一个变量的数据类型的,instanceof是用于判断某个变量是否是指定类型的实例。
我们来看看下面的代码。
题目1
在Javascript中Null作为一种单独的数据类型,其类型只有一个值null。Null是一个特殊的Object类型,因此在typeof null时,返回的是‘object’。
既然typeof null返回的是object,那么null instanceof Object是不是就返回true呢?结果是否定的。
由于Null的特殊性,null值的产生并不是通过Object原型链的,通过Object类型的原型链不能追溯到Null值,因此null instanceof Object返回值为false。
题目2-reduce方法
第二道题是reduce方法与Math.pow()方法结合,确定输出结果,代码如下。
题目2
首先我们来看看reduce方法的使用,它的API如下。
recude方法
接收一个回调函数,对数组中的元素依次进行处理,从参数名可以很容易看出previousValue为上一次计算结果的值,currentValue表示当前处理值。
同时可选择接收一个初始值initialValue,如果这个initialValue传递了,那么第一次调用回调函数时的previousValue就等于initialValue,如果没有传递则previousValue就等于数组的第一个值。
理解上述的原则后,我们再来看看这道题目。
题目2中的回调函数是Math.pow(),Math.pow(a, b)表示的是a的b次方。其中a就是reduce回调函数的previousValue,b就是currentValue了。
在第一段代码中,没有传递initialValue,则previousValue为3,currentValue为2,那么计算后是Math.pow(3, 2) = 9。
同理在第二次计算时,previousValue为9,currentValue为1,则计算结果时Math.pow(9, 1) = 9。
因此第一段代码最终结果是9。
再来看看第二段代码,不同于第一段的是它传递了initialValue为0,那么在进行第一次计算时,previousValue为0,currentValue为3,则第一次计算是Math.pow(0, 3) = 0;
接下来进行第二次计算,previousValue为上一次计算结果0,currentValue为2,则计算结果是Math.pow(0, 2) = 0;
同理最后一次计算,previousValue为0,currentValue为1,计算结果是Math.pow(0, 1) = 0;
因此第二段代码最终结果是0。
题目3-Boolean与[0]
第三道题考察的是Boolean与[0]的用法,代码如下所示。
题目3
代码首先定义了一个变量a,为只有一个元素0的数组。
然后通过if语句判断[0]是否为true,进而输出不同的值。
这道题的核心在于if语句中的返回结果,需要注意的是,if语句的判断结果实际是利用了Boolean的构造方法,看看利用Boolean的构造方法能否将if语句中的值转化为true。
根据Boolean构造方法的定义,如果逻辑对象无初始值或者其值为 0、-0、null、""、false、undefined 或者 NaN,Boolean构造方法会返回false,否则返回true。
从题目中我们可以看出if语句中的值为[0],不满足任何一个返回false值的条件,因此Boolean([0])=true,那么if判断语句就进入到true的判断中。
那么就会执行console.log(a==true),注意这里的判断并不会调用Boolean的构造方法,而是直接比较[0]与true。
这个时候true会转换为1,[0]会进行隐式转换,[0]会转换为'0',然后转换为数字0,相当于比较0与1的值。
很明显0与1比较返回false,那么最终的结果是输出false。
题目4
题目4主要考察的是算术运算符与正负运算符,题目代码如下。
题目4
很多人看到这么多加减号,都以为这题目是不是出错了?其实是没有问题的。
遇到这样的题目,只要记住以下这点内容:
在数字后面的第一个符号为算术运算符加/减,其他加减号都是正负数转换的运算符。
第一行代码可以拆分成这样的内容。
1 + (- + + + - + 1)
优先处理后面括号中的值,其中的加减号表示正负数转换的。
从右往左看,首先是+1,然后是负号-,变为-1,在连续三个正号+,还是-1,最后是一个负号-,变为+1。
其实最后计算就是1 + 1 = 2。
懂得这个原理后,我们直接看第三行代码,拆分后变成这个样子。
1 - (- + + + - - - - + + 1) + (1) + (- - - - + - 1)
对括号中的数优先处理,第一个括号中得到的值是-1,第二个括号中得到的值是1,第三个括号中得到的值是-1。
所以实际的运算是1-(-1)+1+(-1)=2。
题目5-arguments
在JavaScript中有一个arguments对象,表示的是传递给函数的参数对象,这道题目也与arguments有关。
题目5
我们来分析下上面的代码。
定义一个函数,用于将数组的第三个元素值赋给第一个元素。
定义第二个函数,传递的参数先赋初始值,然后经过第一个函数处理。
计算三个参数相加的和并返回。
在函数中arguments是直接代表该函数接收的参数列表的,上面的bar函数内部的arguments实际就是[a, b, c]。
我们需要记住以下这条规则,在函数没有接收变长参数(...扩展运算符),默认参数和结构赋值等ES6的新特性时,arguments对象的值和参数的值是相互影响的。
因此第一个函数中将第三个元素值赋给第一个元素是生效的,那么c=10,a=10,b=1,所以最终结果返回21。
但是如果使用了ES6中的几个新特性时,arguments对象的值和参数值是不会相互受影响的。
我们来看看以下的例子。
使用变长参数
只需要将上面的题目做简单的修改,第一个函数的参数ary变为...ary即可。
修改1-变长参数
使用变长参数后,对ary进行修改,不会影响到原来函数的参数a,b,c的值,所以a=1, b=1,c=10,最终结果返回12。
使用默认参数
同样对以上原始题目做简单的修改,对c使用默认参数。
默认参数
修改后的代码中,给c设定默认值为2。使用默认参数后情况与上面一种一样,最终的结果也是返回12。
使用解构赋值
对以上代码进行简单的改造,得到如下使用解构赋值的代码。
使用解构赋值
同样最终的结果返回12。
结束语
今天这篇文章讲解了几道JavaScript相关的题目,虽然代码量都很少,但是理解起来却不是那么容易,需要慢慢消化,希望今天的文章对你们有帮助噢~
猜你喜欢
- 2025-06-24 晨光微醺时!2 道 JS 核心题漫谈,解锁面试小技巧
- 2025-06-24 js基础面试题92-130道题目(50道js面试题)
- 2025-06-24 3 个高级 JavaScript 面试问题(js面试题必问)
- 2025-06-24 晨光微暖时!2 道 JS 经典面试题拆解,开启惬意学习日
- 2025-06-24 JS面试题突破:谈谈 undefined 和 null ?
- 2025-06-24 9 个你可能不知道答案的常见 JavaScript 面试题
- 2025-06-24 19个基本的JavaScript面试问题及答案(都是实用技巧)免费送
- 2025-06-24 JavaScript篇面试题(js面试题基础)
- 2024-10-05 前端面试,你有必要知道的一些JavaScript 面试题(上)
- 2024-10-05 前端面试题《JS基础》 前端面试 js
你 发表评论:
欢迎- 586℃几个Oracle空值处理函数 oracle处理null值的函数
- 580℃Oracle分析函数之Lag和Lead()使用
- 567℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 564℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 560℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 553℃【数据统计分析】详解Oracle分组函数之CUBE
- 539℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 533℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端懒加载 (49)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)