Lo-Dash

(本周总结)工具库源码+算法+原生

我的未来我决定 提交于 2021-02-12 08:43:17
202快乐数 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1 如果可以变为1,那么这个数就是快乐数 输入: 19 输出: true 解释: 12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1 /*和不等于1,且重复就不是快乐树*/ const isHappy = n => { let set = new Set() n += '' let sum = 0 while (sum != 1) { sum = 0 for (let i = 0; i < n.length; i++) { sum += n[i] ** 2 } if (set.has(sum)) return false n=sum+'' set.add(sum) } return true } console.log(isHappy(20))//false //第二种 const isHappy = n => { let exit = [] let sum while (n != 1) { sum = 0 while (n !=0) { sum += (n % 10) ** 2 n = parseInt(String(n / 10)) } if (exit.indexOf(sum) > -1) { return

【早读汇】上海@jean-lee《ES6标准入门》笔记

眉间皱痕 提交于 2021-01-18 10:31:43
【早读汇】上海@jean-lee《ES6标准入门》笔记 前言 本文系 早读汇第三期活动 来自上海@jean-lee 的读书笔记。 正文从这开始~ Module ES6 模块的设计思想,是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。 ES6 模块不是对象,而是通过export命令显式指定输出的代码,再通过import命令输入。 ES6 模块的优点: 静态加载 不再需要UMD模块格式了,将来服务器和浏览器都会支持 ES6 模块格式。目前,通过各种工具库,其实已经做到了这一点。 将来浏览器的新 API 就能用模块格式提供,不再必须做成全局变量或者navigator对象的属性。 不再需要对象作为命名空间(比如Math对象),未来这些功能可以通过模块提供。 严格模式 严格模式主要有以下限制: 变量必须声明后再使用 函数的参数不能有同名属性,否则报错 不能使用with语句 不能对只读属性赋值,否则报错 不能使用前缀0表示八进制数,否则报错 不能删除不可删除的属性,否则报错 不能删除变量delete prop,会报错,只能删除属性delete global[prop] eval不会在它的外层作用域引入变量 eval和arguments不能被重新赋值 arguments不会自动反映函数参数的变化 不能使用arguments.callee 不能使用arguments

比较 JavaScript 对象的四种方式

此生再无相见时 提交于 2021-01-12 13:54:39
比较 JavaScript 中的值非常简单,只需用相等运算符即可,例如严格相等运算符: 1'a' === 'c'; // => false 21 === 1; // => true 但是对象却有结构化的数据,所以比较起来比较困难。在本文中,你将学习如何正确比较 JavaScript 中的对象。 1. 引用比较 JavaScript 提供了 3 种方法来对值进行比较: 严格相等运算符 === 宽松相等运算符 == Object.is() 函数 当使用上述任何一种方法比较对象时,只有在比较的值引用了相同的对象实例时,比较的结果为 true。这就是参照相等性。 让我们定义对象 hero1 和 hero2 ,并查看实际中的参照相等性: 1const hero1 = { 2 name: 'Batman' 3}; 4const hero2 = { 5 name: 'Batman' 6}; 7 8hero1 === hero1; // => true 9hero1 === hero2; // => false 10 11hero1 == hero1; // => true 12hero1 == hero2; // => false 13 14Object.is(hero1, hero1); // => true 15Object.is(hero1, hero2); // => false

web开发常见的几大安全问题

允我心安 提交于 2020-12-23 07:31:34
一、SQL注入 SQL注入是一种常见的Web安全漏洞,攻击者利用这个漏洞,可以访问或修改数据,或者利用潜在的数据库漏洞进行攻击。SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。 1.SQL注入的原理 我们先举一个万能钥匙的例子来说明其原理: < form action= "/login" method= "POST"> < p>Username: < input type= "text" name= "username" /> </ p> < p>Password: < input type= "password" name= "password" /> </ p> < p> < input type= "submit" value= "登陆" /> </ p> </ form> 后端的 SQL 语句可能是如下这样的: let querySQL = ` SELECT * FROM user WHERE username=' ${username}' AND psw=' ${password}' `;

几个常用js库,别再重复造轮子了

爷,独闯天下 提交于 2020-12-22 21:40:52
年底了,总结下今年用到的一些有意思的《js轮子》(只是大概列出些比较有意思的库,每个标题都是超链接,可点击自行查阅) 希望能对您有用! 如有意思的 轮子 可以在评论列出一起讨论下 color ==功能==:JavaScript库,用于不可变的颜色转换和对CSS颜色字符串的支持。 npm install color var color = Color('#7743CE').alpha(0.5).lighten(0.5); console.log(color.hsl().string()); // 'hsla(262, 59%, 81%, 0.5)' console.log(color.cmyk().round().array()); // [ 16, 25, 0, 8, 0.5 ] console.log(color.ansi256().object()); // { ansi256: 183, alpha: 0.5 } uuidjs ==功能==:UUID.js-JavaScript的RFC兼容UUID生成器 // Create a version 4 (random number-based) UUID object var objV4 = UUID.genV4(); // Create a version 1 (time-based) UUID object var objV1

TypeScript 4.1 新特性:字符串模板类型,Vuex 终于有救了?

故事扮演 提交于 2020-12-22 17:26:51
TypeScript 4.1 快要发布了,老爷子 Anders Hejlsberg[1] 加入了一项重大更新, 「字符串模板类型」 的支持。昨天看到这个更新的我特别兴奋,曾几何时,只要一遇到字符串拼接相关的类型,TypeScript 就束手无策了,比如: Vuex 中加了 namespace 以后, dispatch 一个 mutation type 会带上前缀 dispatch('cart/add') 。 lodash 的 get 方法,可以对一个对象进行 get(obj, 'a.b.c') 这样的读取。 现在 4.1 加入的这个新功能让这一切都拥有了可能。 基础语法 它的语法和 es 里的字符串模板很相似,所以上手成本也很低,先看几个例子: type EventName<T extends string> = `${T}Changed`; type T0 = EventName<'foo'>; // 'fooChanged' type T1 = EventName<'foo' | 'bar' | 'baz'>; // 'fooChanged' | 'barChanged' | 'bazChanged' type Concat<S1 extends string, S2 extends string> = `${S1}${S2}`; type T2 = Concat<'Hello

cocos 引入lodash库对鼠标移动做节流处理

試著忘記壹切 提交于 2020-12-05 17:02:06
可以直接引入 import { cloneDeep } from "lodash"; import * as _ from "lodash"; 还有一种方式用的比较少...把import当成const使用, 不知道有什么作用... 反正都是引进来就能用 import debounce = require("lodash/debounce"); import cloneDeep = require("lodash/cloneDeep"); 引入自己的脚本也是一样的 import { fib } from "./utils"; 鼠标移动事件的节流处理 const debounceTime = 100; const move = throttle((e) => { const location = e.getLocation(); this.center.x = location.x - this.w / 2; this.center.y = location.y - this.h / 2; }, debounceTime); cc.director .getScene() .getChildByName("Canvas") .on(cc.Node.EventType.MOUSE_MOVE, move); 来源: oschina 链接: https://my.oschina.net

JavaScript 专题(九)数组中查找指定元素

☆樱花仙子☆ 提交于 2020-11-14 11:12:48
JavaScript 专题(九)数组中查找指定元素 上一篇文章中,我们了解了数组扁平化的思想,并学习了 lodash 是如何处理数组扁平化的。 这次我们来讨论 在数组中查找元素 时所用的一些方法,并且参考lodash来实现我们自己的工具方法 文章目录 一、findIndex 和 findLastIndex 1.1 findIndex 1.2 findLastIndex 1.3 合并 findIndex 和 findLastIndex 二、sortIndex 2.1 遍历 2.2 二分法 三、indexOf 和 lastIndexOf 3.1 indexOf 的第一版实现 3.2 indexOf 和 lastIndexOf 通用第一版 3.3 indexOf 和 lastIndexOf 通用第二版 参考 写在最后 一、findIndex 和 findLastIndex 1.1 findIndex findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引。若没有找到对应元素则返回-1。 const array1 = [ 5 , 12 , 8 , 130 , 44 ] ; const isLargeNumber = ( element ) => element > 13 ; console . log ( array1 . findIndex (

前端面试题整合(JS进阶篇)(二)

房东的猫 提交于 2020-11-09 10:37:21
Ajax 是什么? 如何创建一个Ajax? AJAX全称是Asychronous JavaScript And Xml(异步的 JavaScript 和 XML) 它的作用是用来实现客户端与服务器端的异步通信效果,实现页面的局部刷新,早期的浏览器并不能原生支持ajax,可以使用隐藏帧(iframe)方式变相实现异步效果,后来的浏览器提供了对ajax的原生支持 其主要通过XMLHttpRequest(标准浏览器)、ActiveXObject(IE浏览器)对象实现异步通信效果 实现方式( gitee上的案例 ): var xhr =null;//创建对象 if(window.XMLHttpRequest){ xhr = new XMLHttpRequest(); }else{ xhr = new ActiveXObject("Microsoft.XMLHTTP"); } xhr.open(“方式”,”地址”,”标志位”);//初始化请求 xhr.setRequestHeader(“”,””);//设置http头信息 xhr.onreadystatechange =function(){}//指定回调函数 xhr.send();//发送请求 Ajax的优缺点 优点: 通过异步模式,提升了用户体验 优化了浏览器和服务器之间的传输,按需获取数据,减少不必要的数据往返,减少了带宽占用

前端性能优化(21种优化+7种定位方式)

拜拜、爱过 提交于 2020-10-23 06:45:33
1.重要性: 关注前端可以很好地提高性能。如果我们可以将后端响应时间缩短一半,整体响应时间只能减少5%~10%。而如果关注前端性能,同样是将其响应时间减少一半,则整体响应时间可以减少40%~45%。 改进前端通常只需要较少的时间和资源,减少后端延迟会带来很大的改动。 只有10%~20%的最终用户响应时间花在了下载HTML文档上,其余的80%~90%时间花在了下载页面中的所有组件上。 2.定位: 2.1 技术上的选择 在前端日常开发中,技术上的选择是非常重要的。为什么要讲这个呢?因为现象频发。 前端工程化严重的当下,轻量化的框架慢慢被遗忘掉了。并不是所有的业务场景都适合使用工程化框架,react/vue 并不轻量。 复杂的框架是为了解决复杂的业务 如果研发h5、PC展示等场景简单的业务时候,javascript原生 配合一些轻量化插件更适合。 多页面应用也并不都是缺点。根据业务不同而选择不一样的技术是非常重要的,是每个前端都应该反思的事情。 这方面是导致卡顿的关键问题。 2.2 NetWork 我们的老朋友NetWork想必前端同学都很熟悉。我们先来看一下network面板 从面板上我们可以看出一些信息: 请求资源size 请求资源时长 请求资源数量 接口响应时长 接口发起数量 接口报文size 接口响应状态 瀑布图 瀑布图 是什么呢? 瀑布图就是上方图片后面的 waterfall