‘skill-check’ JS 测验

发布: (2026年3月3日 GMT+8 23:36)
2 分钟阅读
原文: Dev.to

Source: Dev.to

问题 1:类型强制转换

下面的代码在控制台会输出什么?

console.log(0 == '0');
console.log(0 === '0');

答案: true,随后 false

解释: 搜索 “JavaScript Type Coercion” 以了解为什么 == 会进行类型转换,而 === 不会。

问题 2:箭头函数的 this

在下面的代码片段中,会打印出什么?

const user = {
  name: 'Alex',
  greet: () => {
    console.log(`Hi, I'm ${this.name}`);
  }
};

user.greet();

答案: Hi, I'm undefined(在某些环境下可能是空字符串)

解释: 箭头函数会从其外层词法作用域继承 this(全局对象或模块),而不是从定义它的对象继承。若想访问 user.name,应使用普通函数表达式。

问题 3:varlet 在异步循环中的表现

这段代码的执行结果是什么?

for (var i = 0; i  console.log(i), 1);
}

答案: 3, 3, 3

解释: var 是函数作用域的,所以循环在 setTimeout 回调执行之前已经结束,i 的值为 3。如果将 var 换成 let,则会分别输出 0, 1, 2,因为 let 为每次迭代创建了新的绑定。

问题 4:数组引用行为

list2 会怎样?

let list1 = [1, 2, 3];
let list2 = list1;
list1.push(4);

console.log(list2.length);

答案: 4

解释: 数组是按引用传递的对象。list2 并不是副本,而是指向与 list1 相同的底层数组。

问题 5:typeof null

typeof null 的结果是什么?

答案: "object"

解释: 这是 JavaScript 最初版本留下的一个长期存在的怪癖,为了向后兼容仍然保留至今。

0 浏览
Back to Blog

相关文章

阅读更多 »

移动端优化的智能面包屑

封面图片:移动优化智能面包屑 https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fde...