我正在参加「掘金·启航计划」
前言:
作为前端开发工程师,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” 或 “false”
true -> "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"