3个简单但棘手的JavaScript面试问题
JavaScript数组的length属性
问题一
clothes[0] 的值是什么?
const clothes = ['jacket', 't-shirt'];
clothes.length = 0;
clothes[0]; // => ???
Answer
数组对象的 length 属性具有特殊的行为:减少length属性的值的副作用是删除自己的数组元素。因此,当JavaScript执行 clothes.length = 0 的时候将删除所有元素。
clothes [0] 等于 undefined 的,因为 clothes 数组已被清空。
自动分号插入
问题二
arrayFromValue() 返回什么值?
function arrayFromValue(item) {
return
[item];
}
arrayFromValue(10); // => ???
Answer
很容易错过 return 关键字和 [item] 表达式之间的换行符。此换行符使JavaScript自动在 return 和 [item] 表达式之间插入分号
function arrayFromValue(item) {
return;
[item];
}
arrayFromValue(10); // => undefined
return; 函数内部使其返回 undefined。因此 arrayFromValue(10) 的值为 undefined。
浮点数计算
问题三
这个等式的结果是什么?
0.1 + 0.2 === 0.3 // => ???
Answer
首先我们要先知道0.1 + 0.2 的值:
0.1 + 0.2; // => 0.30000000000000004
0.1 和 0.2 的总和不完全是 0.3,而是略高于 0.3。
由于以二进制方式对浮点数进行编码,因此像浮点数相加之类的操作会产生舍入误差。
简而言之,直接比较浮点数并不精确。
因此 0.1 + 0.2 === 0.3 的结果是 false。