![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
javascript基础
javascript学习笔记
推开世界的门
掘金地址:https://juejin.cn/user/2963939081585479/posts
展开
-
数组去重的几种方法
数组去重,简单明了原创 2022-07-14 16:11:04 · 175 阅读 · 0 评论 -
js 循环对象时,输出顺序为什么会乱?
先看一个demo输出顺序从 这里可以看出,数字按升序的顺序输出,字符串按,创建时的顺序输出,这也是ECMAScript规范中定义「数字属性应该按照索引值⼤⼩升序排列,字符串属性根据创建时的顺序升序排列。并且数字属性优先于字符串」下面我们来看下这个规范下实现的过程以及原因首先JS代码本身是不会直接被计算机执行,计算机只能接收二进制的汇编代码,所以,中间需要一层转化,而这个转化,在chrom就是v8引擎在v8 里是怎么样存储和读取对象属性的呢,在v8里,将对象里的属性,分为两大类。原创 2022-05-05 10:34:20 · 2096 阅读 · 0 评论 -
js -对连续月份数据做处理拆分
需求背景积分列表,返回用户的积分数据,想做一个按月的展示。想着后端按月返回不就可以了,但是要做触底翻页,每个月的数据也不确定,不太好做拆分,那就前端来搞吧数据这里是二月和三月的分界点,我们要把数据处理成这种格式即可有一个标识,判断显示时间那条数据,并且时间那条数据也要在列表里,应为要做循环转换后数据格式这样循环的时候,判断type == ‘tag’ ,则显示月份,下一个数据,正常循环代码list.forEach((item) => { const { desc: lab原创 2022-04-22 20:09:02 · 629 阅读 · 0 评论 -
if-else 优化
if -else 优化工厂模式将逻辑单独抽离成方法构造数据表结构以上就是对if-else的优化原创 2022-04-22 16:07:24 · 144 阅读 · 0 评论 -
讲 透Object.prototype.toString.call()
Object.prototype.toString.call()这个方法是用来判断数据类型的,主要用到的知识点是原型,原型链,toString(),calltoString每个对象都有一个 toString() 方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。默认情况下,toString() 方法被每个 Object 对象继承。如果此方法在自定义对象中未被覆盖,toString() 返回 "[object type]",其中 type 是对象的类型。demo原创 2022-04-22 14:22:41 · 5530 阅读 · 1 评论 -
js将短划线分隔的单词变成骆驼式的
function camelize(str) { return str .split('-') // splits 'my-long-word' into array ['my', 'long', 'word'] .map( // capitalizes first letters of all array items except the first one // converts ['my', 'long', 'word'] into ['my', 'Long原创 2022-01-27 16:30:11 · 786 阅读 · 0 评论 -
JS - 精度问题
今天在学习js过程中,发现了一个精度问题 2^53 -1一探究竟根据国际标准IEEE 754,javascript浮点数的64个二进制位,从最左边开始,是这样组成的第1位: 符号位,0表示正数,1表示负数 (1位)第2位到第12位: 储存指数部分 (11位)第13位到第64位:储存小数部分(即有效数字 52位,除去 符号位和指数位)符号位决定了一个数的正负,指数部分决定了数值的大小,小数部分决定了数值的精度IEEE 754规定,有效数字第一位默认总是1,不保存在64位浮点数之中。也就是原创 2021-12-08 16:45:51 · 486 阅读 · 0 评论 -
JS取出两个数组中相同的元素
实现目的商品搜索,需要满足名字搜索和id搜索。名字搜索,是直接走接口数据。但是id搜索完,需要展示对应的商品。所以需要将id做个比较,确保输入的id 是有商品的.毕竟不能百分之百手动输入正确,所以程序需要做处理找出相同的元素let arr1 = [1, 2, 5];let arr2 = [1, 3, 4, 2];function compare(arr1, arr2) { return arr1.filter((v) => { return arr2.includes(v);原创 2021-12-06 18:05:03 · 9628 阅读 · 0 评论 -
js -promsie实现每隔一秒输出1,2,3
定时器版 function timer() { for (let i = 1; i < 4; i++) { setTimeout(() => { console.log(`输出${i}`) }, 1000 * i) } } timer()定时器+ promsie async function timer() { for (let i = 1;原创 2021-07-29 16:38:28 · 1935 阅读 · 0 评论 -
珠峰架构 - 手写promise
基础版核心思想是状态的改变,会引起值的改变,且状态不可逆。主要是为了解决异步回调地狱问题1. 三个状态 pending,fulfilled,rejected.三者的初始状态都是pending.且只能是pending->fulfilled,pending->rejected2. new Promsie的时候,需要传一个执行器,executor,执行器立即执行3. 状态的改变,会引起值的改变,成功和失败的值,分别为value,reason4. promise必须有一个then方法,来接原创 2021-07-29 15:55:58 · 1226 阅读 · 0 评论 -
项目中常用的js技巧--持续更新
10.17记录数据的截取给定一个字符串,将字符串根据指定的符号进行分割,并且取出分割后的结果let str ='b90812ad;117'let pre = str.substr(0, str.indexOf(';'))console.log(pre) // b90812adlet next = str.substr(str.indexOf(';') + 1, str.length)console.log(next) // 117数据的修改后端返回的base64图片数据,没有带 'dat原创 2020-10-17 15:26:51 · 252 阅读 · 0 评论 -
vue 将二维数组转化为一维数组
需求数组嵌套数据,导致循环不方便,想着将二维数组合并成一维数据,方便数据的操作具体实现利用reduce方法reduce:不改变原数组,返回一个新的数组。就是遍历数组元素,从头开始,依次往下,第一个参数是上一次的返回值,第二个参数是下一个数组元素,首次的时候第一个和第二个参数分别是 array[0], array[1] ;let flat=[[1,2,3],[4,5,6],[6,7,8]].reduce( (prev,next)=> { return prev.concat(next)原创 2020-07-28 11:10:21 · 2470 阅读 · 0 评论 -
vue点击事件的骚操作
数据是通过v-for渲染出来,点击某个按钮想显示删除文字,没想到所有的删除文字都显示了?点击的时候,传一个唯一标识进去,并且把他重新赋值,在显示删除哪里加一个判断。看赋值的标识和传入的标识是否一致 && 当前显示是true代码实现 <div class="del_llince" @click.stop="isR(item.Id, item.Name)">...</div> <div class="remo" .原创 2020-07-28 08:33:52 · 690 阅读 · 0 评论 -
事件循环(Event Loop)
event loop它的执行顺序:一开始整个脚本作为一个宏任务执行执行过程中同步代码直接执行,宏任务进入宏任务队列,微任务进入微任务队列当前宏任务(同步代码)执行完出队,检查微任务列表,有则依次执行,直到全部执行完执行浏览器UI线程的渲染工作检查是否有Web Worker任务,有则执行执行完本轮的宏任务,回到2,依此循环,直到宏任务和微任务队列都为空微任务包括:MutationObserver、Promise.then()或catch()、Promise为基础开发的其它技术,比如fet原创 2020-06-08 14:45:05 · 228 阅读 · 0 评论 -
js-实现快速排序
基本思路:1.以一个数为基准(中间的数),比基准小的放到左边,比基准大的放到右边2.再按此方法对这两部分数据分别进行快速排序(递归进行)3.不能再分后退出递归,并重新将数组合并代码实现:function quickSort(arr) { // 数组长度小于,没必要排序,直接返回 if (arr.length <= 1) { return arr ...原创 2020-03-10 19:20:26 · 190 阅读 · 0 评论 -
js - 利用递归函数求 1 ~ n 的阶乘 1*2*3*4*.......n
递归的思想函数的内部 自己调用自己,就是递归 (避免死循环,加退出条件) function close(n) { if (n == 1) { return 1 } return n * close(n - 1) } console.log(close(3)) // 思路:1: 如果传...原创 2020-02-25 18:31:18 · 3504 阅读 · 0 评论 -
JS中创建10个a标签,点击弹出对应的序号
for (let i = 1; i <= 10; i++) { let a = document.createElement('a') a.innerHTML = i + '<br>' document.body.appendChild(a) a.addEventListener('click', functio...原创 2020-02-02 12:44:52 · 1280 阅读 · 0 评论 -
js数据类型及其检测
js数据类型分基本数据类型和引用数据类型基本数据类型 number,string,boolean,undefined,symbol引用数据类型object ([] {} null)基本数据类型特点:值是不可变得存放在栈区(占据空间小、大小固定,属于被频繁使用数据)检验数据类型typeof: 检测全部基本数据类型(number,string,boolean,u...原创 2020-02-01 11:44:01 · 150 阅读 · 0 评论 -
js深拷贝与浅拷贝
let obj1 = { age: 12, bobby: { play: '打篮球' } } // 深拷贝let obj2 = deepClone(obj1) // 浅拷贝 // let obj2 = obj1obj2.bobby.play = '玩啥呢'console.log(o...原创 2020-01-31 20:01:50 · 140 阅读 · 0 评论 -
js解析url三种方法
js解析url,就是将如下urlconst url = 'https://www.baidu.com/m?f=8&ie=utf-8&rsv_bp=1&tn=monline_3_dg&wd=session'解析为法一: 利用splice分割+循环依次取出先看代码function queryURLparams(url) { let obj = {}...原创 2020-01-30 17:47:08 · 17560 阅读 · 6 评论 -
js如何把一个字符串的大小写取反
let str = 'BBBBBgsdff'str = str.replace(/[a-zA-Z]/g, content => { // content : 每一次正则匹配的结果 return content.toUpperCase() === content ? content.toLowerCase() : content.toUpperCase()})conso...原创 2020-01-20 10:36:11 · 2629 阅读 · 0 评论 -
js数组去重-四大方法
法一:es6方法1.Set+展开运算符let arr = [ 1,2,3,4,2,3 ]let ary = [ ...new Set(arr) ]2.Array.form+let arr = [ 1,2,3,4,2,3 ]let ary = [ Arrat.form(new Set(arr)) ]法二:当前项和后面每一项比较1.indexOf 配合splicelet arr = ...原创 2020-01-08 11:30:34 · 543 阅读 · 0 评论 -
js 仿京东放大镜
功能模块整个案例可以分为三个功能模块 鼠标经过小图片盒子, 黄色的遮挡层 和 大图片盒子显示,离开隐藏2个盒子功能 黄色的遮挡层跟随鼠标功能。 移动黄色遮挡层,大图片跟随移动功能。案例分析黄色的遮挡层跟随鼠标功能。 把鼠标坐标给遮挡层不合适。因为遮挡层坐标以父盒子为准。 首先是获得鼠标在盒子的坐标。 之后把数值给遮挡层做为left 和top值。 此时用到鼠标移动事件,但是还...原创 2019-10-17 11:27:22 · 341 阅读 · 0 评论 -
js ---实现排他效果
// 排他功能 let btn = document.getElementsByTagName('button'); for (let i = 0; i < btn.length; i++) { btn[i].onclick = function () { // 在显示当前按钮的时候,先干掉其它的按钮样式 f...原创 2019-10-12 16:58:35 · 610 阅读 · 0 评论 -
js基础案例归档
双重循环:外层循环控制行数,内层循环行内个数1:打印一个倒三角 let str = '' for (let i = 1; i<=9; i++) { for (let j = i; j<=9; j++ ) { //从i开始,内部一直到<=9位置 str += '⭐️'+'\t' } str +...原创 2019-10-12 11:42:28 · 177 阅读 · 0 评论 -
已知有字符串foo=”get-element-by-id”,写一个function将其转化成驼峰表示法”getElementById”。
已知有字符串foo=”get-element-by-id”,写一个function将其转化成驼峰表示法”getElementById”。直接上代码:var foo = "get-element-by-id" var arr = foo.split("-"); console.log(arr); //["get", "element", "by", "id"...原创 2019-06-28 12:42:34 · 1752 阅读 · 0 评论 -
js实现冒泡排序
冒泡排序原理:冒泡排序算法的原理如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比比较 白话就是:比如有6个数,你需要比较5趟,这......原创 2019-06-27 17:12:36 · 70677 阅读 · 16 评论 -
js--常用数组 push,pop,shift,unshift
push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。 var arr1 = [10, 20]; var a = arr1.push(30); console.log(arr1);//(3)[10, 20, 30] console.log(a); //3说明:只有将push之后的数组,用变量来接受,才可以单独得到push返回的新的长度unshif...原创 2019-06-27 17:28:30 · 362 阅读 · 0 评论 -
自定义方法替代控制台输出console.log()
面试中遇到过的一道面试题:如何封装一个console.log()?当时实在不理解为什么要封装这个,为什么不直接拿来用,可能是为了考察apply和arguments?回来之后问了度娘,得到了部分的答案:在开发的过程中,可能会因为debug,加入console.log()这样的语句,在控制台输出内容,方便debug,但是往往上生产就忘记删除,导致信息泄露...当然,它的功能可能不仅仅于...原创 2019-07-01 15:40:29 · 4775 阅读 · 0 评论 -
formidable is not defined 报错已解决
在ajax提交数据的时候,用formidable识别表单,首先安装formidable依赖,cnpm install formidable --save安装完依赖,去看formidable 的API, 但是运行结果却是formidable is not defined .此时你需要看看你的控制器有没有将formidable引入你需要将他引入,才可以使用,也就是说你得先...原创 2018-12-24 18:11:42 · 1810 阅读 · 0 评论 -
underscore.js 报_is not defined解决方法
最近在ejs和underscore.js写程序,但是由于两个的标记符<%冲突了,所以决定修改underscore.js的源码,修改完折后就报错了用jquery 发出ajax请求,然后用underscore.js填充模板,但是控制台一直报_ is not defined我找了两天,终于找到问题所在了。首先打开他的官网 : https://cdn.bootcss.com/un...原创 2018-12-21 11:00:16 · 1630 阅读 · 0 评论 -
js面试:var x = 'c' function t (){} t()变量提升
今天有同学在在群里问了一道这个题:var x = 'c'function t (){var x;console.log(x);var x = 'c';console.log(x);}为什么第一个输出是undefined?这道题有一个很大的迷惑点,function里面有一个var x = 'c'外面也有一个var x = 'c';下面解释为什么第一个输出是un...原创 2018-12-07 20:14:33 · 1539 阅读 · 0 评论