送你43道JS面试题(收藏)(10)

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

typeof sayHi();

A: "object"

B: "number"

C: "function"

D: "undefined"

答案: B

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

仅供参考:只有7种内置类型:null,undefined,boolean,number,string,object和symbol。 function不是一个类型,因为函数是对象,它的类型是object。

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

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

A: 0, '', undefined

B: 0, new Number(0), '', new Boolean(false), undefined

C: 0, '', new Boolean(false), undefined

D: 所有都是假值

答案: A

  • JavaScript中只有6个假值:
  • undefined
  • null
  • NaN
  • 0
  • '' (empty string)
  • false

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

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

console.log(typeof typeof 1);

A: "number"

B: "string"

C: "object"

D: "undefined"

答案: B

  • typeof 1 返回 "number".
  • typeof "number" 返回 "string"

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

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

A: [1, 2, 3, 7 x null, 11]

B: [1, 2, 3, 11]

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

D: SyntaxError

答案: C

When you set a value to an element in an array that exceeds the length of the array, JavaScript creates something called "empty slots". These actually have the value of undefined, but you will see something like:

当你为数组中的元素设置一个超过数组长度的值时,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);
})();

A: 1 undefined 2

B: undefined undefined undefined

C: 1 1 2

D: 1 undefined undefined

答案: A

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

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