[翻译] JS选择题

181 阅读1分钟

原文地址

139题

class Counter {
  #number = 10

  increment() {
    this.#number++
  }

  getNum() {
    return this.#number
  }
}

const counter = new Counter()
counter.increment()

console.log(counter.#number)
  • A:10
  • B:11
  • C:undefined
  • D:SyntaxError
Answer 答案:D

在ES2020中, 我们可以在Class中使用#符号定义私有变量. 我们不可以从Class外部访问这些变量. 当我们想打印counter.#number, 一个SyntaxError被抛出: 我们不可从Counter Class外部访问它.

146题

function getFruit(fruits) {
	console.log(fruits?.[1]?.[1])
}

getFruit([['🍊', '🍌'], ['🍍']])
getFruit()
getFruit([['🍍'], ['🍊', '🍌']])
  • A: null, undefined, 🍌
  • B: [ ], null, 🍌
  • C: [ ], [ ], 🍌
  • D: undefined, undefined, 🍌
Answer 答案:D

? 允许我们选择性的访问对象内部深层次嵌套的属性. 我们尝试区打印出fruits数组中索引为1的子数组上索引为1的元素. 如果fruits数组中索引为1的子数组不存在,就简单的返回undefined. 如果fruits数组中索引为1的子数组存在,但这个子数组索引为1的元素不存在, 则返回 undefined.

第一, 我们尝试打印[['🍊', '🍌'], ['🍍']]数组中的子数组['🍍']的第二项. 这个数组值包含一个元素, 意味着它不存在索引为1的元素, 即返回 undefined.

然后, 我们调用了getFruits函数但并没有传入参数, 意味着fruits数组默认值为undefined. 因为我们有条件的链接到了fruits数组的索引1, 则返回 undefined, 因为索引为1的元素不存在.

最后, 我们尝试打印出['🍍'], ['🍊', '🍌']数组中的子数组['🍊', '🍌'] 上的第二项. 在这个子数组上索引为1的元素是🍌, 即被打印了出来.