深拷贝和浅拷贝
深拷贝和浅拷贝是面试高频题,考的是你对基本类型 和 引用类型 在内存里怎么放的理解。 拷贝的目标很明确:从 obj 得到一个「看起来一样」的新对象,但两层引用到底断没断,差别巨大。 内存可以粗分为栈和堆。基本类型的值和指向堆的引用变量放在栈上;对象、数组这类复杂数据放在堆上。浅拷贝只复制最外一层,深…
深拷贝和浅拷贝是面试高频题,考的是你对基本类型 和 引用类型 在内存里怎么放的理解。 拷贝的目标很明确:从 obj 得到一个「看起来一样」的新对象,但两层引用到底断没断,差别巨大。 内存可以粗分为栈和堆。基本类型的值和指向堆的引用变量放在栈上;对象、数组这类复杂数据放在堆上。浅拷贝只复制最外一层,深…
Array.prototype.reduce 按顺序对每个元素跑你提供的回调,每一次都把「到目前为止的汇总结果」传进去,最后收成一个返回值。求和、摊平、计数、去重,都可以写成一次 reduce。 签名是 reduce(callback, initValue?)。回调参数依次为 previousVal…
反射指编译期还不知道加载哪个类,到运行时才加载、执行;程序运行中能拿到自身信息。JS 里 apply 就是一种反射用法。 ES6 的 Reflect 把对对象的底层操作收成一套静态 API,并作为 Proxy 拦截器的默认实现。它不是构造函数,不能 new,也不能当普通函数调用。 一、什么是 Ref…
JavaScript 没有单独的「二维数组类型」。所谓二维数组,就是元素仍是数组 的数组。访问写成 a[行][列],先取外层下标得到一行,再取内层下标得到单元格。 下面按定义、初始化、遍历、对角线求和、打印下三角五步把常用操作走一遍。下标都从 0 开始。 一、定义:数组的数组 长度为 4 的外层数组…
谈 JavaScript 全局变量和局部变量之前,先记住三件事:查找变量走的是作用域链;用 var 时没有块级作用域;函数里声明的变量在整个函数体都有效。 ES6 的 let / const 才真正有块级作用域。 下文例子全部沿用原文的 var,这是面试里仍经常被追问的经典行为。 一、作用域链 in…
业务里经常要生成分享海报:PC 分享图、H5 优惠券、年度账单。需求不同,方案也不同——第三方库、自己用 Canvas 画、丢给接口。各自都踩过跨域、字体、清晰度。 下面按 html2canvas、dom-to-image、前端 Canvas、接口出图整理兼容性和取舍。过程中的坑(跨域、文字、伪类)…
不少场景用 body 滚动不方便,只能局部滚动:Windows 浏览器滚动条难看,iOS 默认没有惯性和弹性,加上 -webkit-overflow-scrolling: touch 又一堆兼容问题,个性化的加载、刷新、贴合滚动更难做。iScroll 用 CSS3 transform 模拟接近原生的…
这篇文章基于实际使用场景总结了 24 个 ES6 代码段,可用来解决项目里一批常见问题:显隐 DOM、滚动、URL 参数、表单序列化、XHR、剪贴板和 Node 建目录。作者 Madza,译者王强。 英文原文:https://madza.hashnode.dev/24-modern-es6-code…
浏览器里读写本地文件,常用三个对象:File、FileList、FileReader。File 继承 Blob,出现在文件选择框和拖拽里;FileList 是一组 File;FileReader 负责把内容读成文本、二进制或 Data URL。 最常见入口是 <input type="file…
下面整理了 JavaScript 里最常被问到的 10 个问题。它们大多落在基础上:闭包、Promise、变量提升、类 等。难度不算高,但面试里反复出现,值得一次对齐口径。 适合刚开始学 JS 的读者:先看懂例子,再对照自己的代码想一遍「如果改掉某一行会怎样」。答案不是唯一标准,这里是便于记忆的讲法…