MST

星途 面试题库

面试题:JavaScript中类型转换与内存管理基础

请描述JavaScript中隐式类型转换的常见场景,并说明如何在这些场景下避免意外的类型错误。另外,简要阐述JavaScript内存管理中垃圾回收机制的工作原理。
33.1万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

JavaScript中隐式类型转换的常见场景

  1. 算术运算
    • 当加法运算符 + 的一侧是字符串,另一侧是非字符串时,会将非字符串转换为字符串然后拼接。例如:'5' + 3 // "53"
    • 其他算术运算符(-, *, /, %)会将操作数转换为数字类型。例如:'5' - 3 // 2
  2. 比较运算
    • 当比较不同类型的值时,会进行类型转换。例如,字符串和数字比较时,字符串会转换为数字。'5' > 3 // true
    • 布尔值在比较时会转换为数字,true 转换为 1false 转换为 0true > 0 // true
  3. 逻辑运算
    • &&|| 运算符在操作数不是布尔值时会进行类型转换。例如:'abc' && 5 // 5,这里 'abc' 被转换为 true'' || 5 // 5,这里 '' 被转换为 false
  4. 条件判断
    • if, while 等条件语句中,非布尔值会被转换为布尔值。例如:if ('abc') { /* 会执行 */ }'abc' 被转换为 true

避免意外类型错误的方法

  1. 显式类型转换:在进行运算或比较之前,使用 Number(), String(), Boolean() 等函数显式地将值转换为需要的类型。例如:let num = Number('5'); num - 3;
  2. 严格比较:使用严格相等运算符 === 和严格不相等运算符 !==,它们不会进行类型转换。例如:'5' === 5 // false

JavaScript内存管理中垃圾回收机制的工作原理

  1. 标记 - 清除算法
    • JavaScript最常用的垃圾回收算法是标记 - 清除。垃圾回收器会定期运行。
    • 它首先从根对象(全局对象 window 在浏览器环境中,global 在Node.js环境中)开始,标记所有可以访问到的对象。
    • 然后,它会遍历堆内存中的所有对象,清除那些没有被标记的对象,回收它们占用的内存空间。
  2. 引用计数
    • 一些早期的JavaScript引擎也使用过引用计数算法。该算法跟踪每个对象被引用的次数。
    • 当一个对象的引用计数变为0时,意味着它不再被任何其他对象引用,垃圾回收器就会回收该对象占用的内存。但该算法存在循环引用的问题,即两个对象相互引用,导致它们的引用计数永远不为0,从而无法被回收。现代JavaScript引擎主要使用标记 - 清除算法来避免这个问题。