两道题有趣的题考验你的js知识,80%的人都不知道答案

2,141 阅读2分钟

我正在参加「掘金·启航计划」

企业微信截图_16653977977940.png

前言:

作为前端开发工程师,JavaScript是我们主要的开发语言,是每个人必须要掌握的,它是弱类型语言,本身语法也比较简单,但是在我们平时使用中也会遇到很多奇奇怪怪的问题,下面分享了两个比较有意思的题目,希望对大家有所帮助同时欢迎讨论指出问题!

1.[,,,].length返回什么?

 [, , ,].length //3

这里考的知识点就是稀疏数组

稀疏数组:是指索引不连续,数组长度大于元素个数的数组,换句话说就是有空袭的数组。稀疏数组访问速度慢,内存利用率高。

示例如下:

以下全是稀疏数组:
1.声明一个没有元素的数组
   var arr = new Array(3);
2.声明一个空数组,给空数组赋值
   var arr1 = [];
   a[4] = 2;
3.数组中有省略值
   var arr2 = [, , ];
   var arr3 = [0, , ];
4.删除数组
   var arr4 = [0, 1, 2, 3];
   delete a[3] // [0,1,2,empty]


[undefined] // 不是稀疏数组

empty:数组的空元素empty表示空位, 它不是一种数据类型, 而是由于人为修改arr.length 或者写入时多写了逗号造成的

undefined:undefined是一种数据类型, 在数组中表示这个位置的值未定义, 但它仍然指向某个内存地址, 这个内存地址指向的是undefined;

使用数组的forEach()方法遍历时会自动忽略空位, 而使用for循环则会将empty转换为undefined并遍历。

2.[1,2,3]+[4,5,6]返回什么?

[1,2,3]+[4,5,6]; //'1,2,34,5,6'
[1, 2, 3] + [, 4, 5, 6]; // -> "1,2,3,4,5,6"
[1, 2, 3, ""] + [4, 5, 6]; // -> "1,2,3,4,5,6"

这里考的知识就是:当值与空字符串相加运算时,加号运算符会先自动转义为字符串。

此出是把数组转化为字符串在相加

  转化前 --> 转化后
  
1.数字转为为字符串:返回数字本身
   1 -> "1"
   0 -> "0"
   
2.布尔值转换为字符串:返回字符串 “true” 或 “falsetrue  -> "true"
   false -> "false"
   
3.数组转换为字符串: 返回数组元素列表,以逗号分隔。如果是空数组,则返回空字符串
   [1,2,3] -> '1,2,3'
   [1,2,3,] -> '1,2,3'
   [1,2,3,,] -> '1,2,3,'
   [1,2,3,''] -> '1,2,3,'
   
4.函数转换为字符串: 返回函数的具体代码字符串
   function(){return 1;}; -> "function (){return 1;}"
   
5.特殊字符
   undefined -> "undefined"
   null      -> "null"
   NAN       -> "NAN"
   Infinity  -> "Infinity"