前端特定手机兼容问题汇总 1: iphone5 iphoneX 对象的结构赋值 会导致字段的顺序发生变化,后面赋值的会在最后面2: 红米K30 pro 微信公众号环境 css透明度 50% 不透明,必须为0.5
前端特定手机兼容问题汇总 1: iphone5 iphoneX 对象的结构赋值 会导致字段的顺序发生变化,后面赋值的会在最后面2: 红米K30 pro 微信公众号环境 css透明度 50% 不透明,必须为0.5
React 中 setState的对象、数组的操作 import {useState} from 'react'import './App.css';function App() { let [count, setCount] = useState(0); let [arr, setArr] = useState([]); const handleClick = () => { count += 1; setCount(count) console.log(count) } const.
手写promise.all promise.all 有以下特点promise.all()返回值是new Promise需要用一个数组存放每一个promise的结果值遍历参数数组,判断是否是promise,是的话执行得到结果后压入结果数组;否则直接放入结果数组。当每个都成功执行后,resolve(result)当有一个失败,rejectfunction isPromise(obj) { return !!obj && (typeof obj === 'object' || typeof
webpack优化 Webpack优化可以分为优化开发体验和优化输出质量两部分1、优化开发体验优化开发体验的目的是为了提升开发时的效率,其中又可以分为以下几点: 优化构建速度。在项目庞大时构建耗时可能会变的很长,每次等待构建的耗时加起来也会是个大数目。 4-1 缩小文件搜索范围 4-1-1 在配置 Loader 时通过 include 去缩小命中范围 4-1-2 优化 resolve.modules 配置,指明存放第三方模块的绝对路径..
Electron 进程间通信 Electron桌面应用中有两个进程,分别是Main主进程和Renderer渲染进程。两个进程间有多种方法进行通信。一、主进程和渲染进程1、主进程Mainmain.js在启动应用后就创建了一个主进程main process,它可以通过electron中的一些模块直接与原生GUI(在你的应用窗口)交互。2、渲染进程Renderer仅启动主进程并不能给你的应用创建应用窗口。窗口是通过main文件里的主进程调用叫BrowserWindow的模块创建的。每个页面都是运行在自己的进程里,这些进程我
js手动实现 Reduce 方法 Array.prototype.myReduce = function (fn, initValue) { if (initValue === undefined && !this.length) { throw new Error('myReduce of empty array with no initial value'); } // let result = initValue === undefined ? this[0] : initValue;不要这样.
js 如何实现循环跳出请求 1.for方法跳出循环function getItemById(arr, id) { var item = null; for (var i = 0; i < arr.length; i++) { if (arr[i].id == id) { item = arr[i]; break; } } return item;
兔子数列 兔子在出生两个月后,就有繁殖能力,一对成年而有繁殖力的兔子每个月能生出一对小兔子来。假设一年以后所有兔子都不死,那么一对小兔子一年以后可以繁殖多少对兔子?1,递归function add(n){ if(n <= 2){ return 1; }else{ return add(n-1) + add(n-2); }}2,尾递归优化function add(n,res1 =1,res2 = 1){ if(n <=
web前端柯里化面试题 定义实现柯里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。1.实现一个函数功能:sum(1,2,3,4…n)转化为 sum(1)(2)(3)(4)…(n)// 使用柯里化 + 递归function curry ( fn ) { var c = (...arg) => (fn.length === arg.length) ? fn (...arg) : (...arg1) =>
js实现deepCopy function deepClone (data) { const type = metaType(data); let obj = null; if (type === 'array') { obj = []; for (let i = 0; i < data.length; i++) { obj.push(deepClone(data[i])); } } else if (type === '.
移动端视口配置 <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />initial-scale: 初始的缩放比例; minimum-scale: 允许用户缩放到的最小比例; maximum-scale: 允许用户缩放到的最大比例; user-scalable: 用户是否可以手动缩放; ...
前端性能优化都有哪些 1,SEO优化 合理的 title 、 description 、 keywords :搜索对着三项的权重逐个减小, title 值强调重点即可,重要关键词出现不要超过2次,而且要靠前,不同页面 title 要有所不同; description 把页面内容高度概括,长度合适,不可过分堆砌关键词,不同页面 description 有所不同; keywords 列举出重要关键词即可 语义化的 HTML 代码,符合W3C规范:语义化代码让搜索引擎容易理解网页 重要内容 HTML 代码放在最前:搜索引擎
事件委托 什么是事件委托 事件代理 ( Event Delegation ) ,又称之为事件委托。是 JavaScript 中常用的绑定事件的 常用技巧。顾名思义,“事件代理”即是把原本需要绑定的事件委托给父元素,让父元素担当事件监 听的职务。事件代理的原理是 DOM 元素的事件冒泡。使用事件代理的好处是可以提高性能 可以大量节省内存占用,减少事件注册,比如在 table 上代理所有 td 的 click 事件就非常棒 可以实现当新增子对象时无需再次对其绑定 ...
CSS3有哪些新特性 1:新特性 新增各种CSS选择器 (: not(.input):所有 class 不是“input”的节点) 圆角 (border-radius:8px) 多列布局 (column) 阴影和反射 (Shadow\Reflect) 文字特效 (text-shadow) 线性渐变 (gradient) 旋转,缩放,定位,倾斜 (transform) 动画 (Animation) 多背景,背景裁剪2: 新增伪类 - 伪元素p:first-of-type 选择属..
js new 手写实现 new做了哪些事情 new到底做了哪些事情(1) 创建一个新对象;(2) 将构造函数中的this指向该对象(3) 执行构造函数中的代码(为这个新对象添加属性) ;(4) 返回新对象。function _new(obj, ...rest){ // 基于obj的原型创建一个新的对象 const newObj = Object.create(obj.prototype); // 添加属性到新创建的newObj上, 并获取obj函数执行的结果. const result = obj.ap...
this, bind,call,apply 面试题 了解 this 嘛,bind,call,apply 具体指什么它们都是函数的方法call: Array.prototype.call(this, args1, args2]) apply: Array.prototype.apply(this, [args1, args2]) :ES6 之前用来展开数组调用, foo.appy(null, []),ES6 之后使用 ... 操作符New 绑定 > 显示绑定 > 隐式绑定 > 默认绑定 如果需要使用 bind 的柯里化和 app
JS 隐式转换,显示转换 一般非基础类型进行转换时会先调用 valueOf,如果 valueOf 无法返回基本类型值,就会调用 toString字符串和数字"+" 操作符,如果有一个为字符串,那么都转化到字符串然后执行字符串拼接 "-" 操作符,转换为数字,相减 (-a, a * 1 a/1) 都能进行隐式强制类型转换[] + {} 和 {} + []复制代码布尔值到数字1 + true = 2 1 + false = 1转换为布尔值for 中第二个 while if 三元表达式 || ...