js练习题第19天 答案及解析

本篇文章是js基础练习题第十九天的答案及解析部分,纯题目部分请移步js基础练习题 第19天

正文

1.请简述nullundefined的区别。

答案:null表示一个空的对象,转为数值时为0undefined表示一个未定义的原始值,转为数值时为NaNundefined == null的结果为true


2.[NaN].indexOf(NaN)的返回值为___________,[NaN].includes(NaN)的返回值为___________。

答案:-1true

Array.prototype.indexOf(item)方法执行的是===(全等)判断;Array.prototype.includes(item)方法判断的是一个数组是否包含指定的值,如果是则返回true,否则返回false


3.parseInt(0.0000008)的返回值为___________,parseInt(0x11, 2)的返回值为___________。

答案:81

parseInt方法有两个参数,第一个参数为转换时的字符串,若非字符串,则先调用String()方法转为字符串;第二个参数为转换字符串采用的进制数。默认为十进制。针对上面两个题,0.0000008转为字符串为"8e-7",故结果为80x11转为字符串,结果为"17",由于该字符串采用的二进制,二进制中没有7,故停止继续转换,结果为1


4.2 ** 3 ** 2 = ___________,{} + {} = ___________。

答案:512"[object Object][object Object]"

**的结合顺序为自右向左结合,即2 ** 3 ** 2 = 2 ** (3 ** 2) = 2 ** 9 = 512;{} + {}会调用Object.prototype.toString()方法,Object.prototype.toString({})返回"[object Object]"


5.请简述=====的区别。

答案:相等运算符(==)比较两个值是否相等;严格相等运算符(===)比较它们是否为同一个类型的同一个值。如果两个值不是同一类型,===直接返回false,而==会发生隐式类型转换,再进行比较是否为同一个值。由于==隐藏的类型转换会带来一些违反直觉的结果,因此建议不要使用==,最好只使用===


6.利用位操作的相关知识,实现两个变量的值的互换。

答案如下所示:

1
2
3
4
// ^为异或操作,位运算,相同为0,相异为1
a ^= b;
b ^= a;
a ^= b;

7.JS内置了哪几种错误对象(Error实例),试分别简述之。

JS定义了五种常见错误对象,如下所示:

  • SyntaxError:表示解析代码时发生的语法错误
  • ReferenceError:引用一个不存在的变量或将值分配给无法分配的对象时发生的错误
  • RangeError:当值超出有效范围时发生的错误,比如数组长度为负数
  • TypeError:指变量或参数不是预期类型时发生的错误,比如调用不存在的函数
  • URIError:URI相关函数的参数不正确时抛出的错误

8.编写一个type函数,要求其能进行精确的类型判断,如:

1
2
3
4
type(/abcd/); // regexp
type(function(){}); // function
type(new Date()); // date
type([]); // array

答案如下所示:

1
2
3
4
5
6
7
8
function type(obj) {
// 调用toString方法,得到形如 [object xxx]的形式
// 其中xxx就是该变量值准确的类型
var typeArr = Object.prototype.toString.call(obj);

// 运用正则表达式,取出xxx这一部分
return typeArr.match(/\[object (.+)\]/)[1].toLowerCase();
}

说明

  1. 题目中出现的JS指的是采用ECMAScript 2015及之后标准的JavaScript
  1. 答案中,若有错误和需完善的地方,可在下方留言反馈哈~~

  2. 查看纯习题版,请点击js基础练习题 第19天

--本文结束 感谢阅读--
创作十分不易,原创更应鼓励