面试题028-43道js题撸题篇34-43

128 阅读2分钟

前两年很火的43道js面试题

34. 下面代码的输出是什么?

function sayHi() {
  return (() => 0)();
}

typeof sayHi();

sayHi函数返回立即调用的函数(IIFE)的返回值。 该函数返回0,类型为数字

仅供参考:只有7种内置类型:nullundefinedbooleannumberstringobjectsymbolfunction不是一个类型,因为函数是对象,它的类型是object

35. 下面这些值哪些是假值?

0;
new Number(0);
("");
(" ");
new Boolean(false);
undefined;

0''undefined

JavaScript中只有6个假值:

  • undefined
  • null
  • NaN
  • 0
  • '' (empty string)
  • false

函数构造函数,如new Numbernew Boolean都是真值。

36. 下面代码的输出是什么?

console.log(typeof typeof 1);
`typeof 1` 返回 `"number"``typeof "number"` 返回 `"string"`

37. 下面代码的输出是什么?

const numbers = [1, 2, 3];
numbers[10] = 11;
console.log(numbers);

当你为数组中的元素设置一个超过数组长度的值时,JavaScript会创建一个名为“空插槽”的东西。 这些位置的值实际上是undefined,但你会看到类似的东西:

[1, 2, 3, 7 x empty, 11]

这取决于你运行它的位置(每个浏览器有可能不同)。

38. 下面代码的输出是什么?

(() => {
  let x, y;
  try {
    throw new Error();
  } catch (x) {
    (x = 1), (y = 2);
    console.log(x);
  }
  console.log(x);
  console.log(y);
})();

1 undefined 2

catch块接收参数x。当我们传递参数时,这与变量的x不同。这个变量x是属于catch作用域的。

之后,我们将这个块级作用域的变量设置为1,并设置变量y的值。 现在,我们打印块级作用域的变量x,它等于1

catch块之外,x仍然是undefined,而y2。 当我们想在catch块之外的console.log(x)时,它返回undefined,而y返回2

39. JavaScript中的所有内容都是...

JavaScript只有原始类型和对象。

40. 下面代码的输出是什么?

[[0, 1], [2, 3]].reduce(
  (acc, cur) => {
    return acc.concat(cur);
  },
  [1, 2]
);

[1, 2, 0, 1, 2, 3]

[1,2]是我们的初始值。 这是我们开始执行reduce函数的初始值,以及第一个acc的值。 在第一轮中,acc[1,2]cur[0,1]。 我们将它们连接起来,结果是[1,2,0,1]

然后,acc的值为[1,2,0,1]cur的值为[2,3]。 我们将它们连接起来,得到[1,2,0,1,2,3]

41. 下面代码的输出是什么?

!!null;
!!"";
!!1;

null是假值。 !null返回true。 !true返回false

""是假值。 !""返回true。 !true返回false

1是真值。 !1返回false。 !false返回true

42. setInterval方法的返回值什么?

它返回一个唯一的id。 此id可用于使用clearInterval()函数清除该定时器。

43. 下面代码的返回值是什么?

[..."Lydia"];

["L", "y", "d", "i", "a"]

字符串是可迭代的。 扩展运算符将迭代的每个字符映射到一个元素。