面试-JS基础知识-变量类型和计算

问题引出:

值类型和引用类型的区别

  • 值类型
    值类型是存储在栈中的简单数据,直接保存具体的值。

Undefined String Boolean Number Symbol Null BigInt

  • 引用类型
    引用类型存储在堆内存中,保存的不是值本身,而是值的内存地址。对引用类型的操作是对其在内存中的引用地址的操作。
    在堆中,key是内存地址,value是实际的值。堆上面的栈的key则是变量,value是内存地址。

Object(Object、Array、Function)

typeof能判断哪些类型?

  • 识别所有值类型

  • 识别函数 function

  • 判断是否是引用类型(不可再细分 比如无法识别出是对象还是数组,都会统一返回object)

深拷贝常见方法:

  1. JSON.parse(JSON.stringify(obj))
    JSON.stringify()是目前前端开发过程中最常用的深拷贝方式,原理是把一个对象序列化成为一个JSON字符串,将对象的内容转换成字符串的形式再保存在磁盘上,再用JSON.parse()反序列化将JSON字符串变成一个新的对象。
    JSON.stringfy() 将对象序列化成json对象
    JSON.parse() 反序列化——将json对象反序列化成js对象
  2. 使用第三方库实现对象的深拷贝,比如:lodash、jQuery
    lodash: _cloneDeep, jQuery.extend。
  3. 手写递归👇

手写深拷贝

function deepClone(obj) {
  if (obj === null || typeof obj !== 'object') {
    return obj; // 如果是原始类型,直接返回
  }

  // 创建一个新的对象或数组
  let clone = Array.isArray(obj) ? [] : {};

  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      clone[key] = deepClone(obj[key]); // 递归拷贝每一个属性
    }
  }

  return clone;
}

更完善的写法:

  • 变量计算

何时使用 === 何时使用 ==
双等号

除了 == null之外,其他一律用 ===

==(等于运算符)会进行 类型转换,即在比较之前会尝试将两个操作数转换为相同的类型,然后再进行比较。
===(严格等于运算符)不会进行类型转换,只有在类型和值都相同的情况下,才返回 true。

if语句和逻辑运算

  • falsely变量和truely变量:两步非运算之后等于false的就是falsely变量
posted @   一个甜橙子  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示