3个简单但棘手的JavaScript面试问题

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。

发布了12 篇原创文章 · 获赞 17 · 访问量 2979

猜你喜欢

转载自blog.csdn.net/qq1140037586/article/details/105308181