
高级JS
文章平均质量分 50
高级JS
alokka
前端劝退师
展开
-
JS i++ 和 ++i 的区别
i++,++i原创 2022-09-16 20:44:37 · 192 阅读 · 0 评论 -
JS var、let、const 变量提升
1. varvar 是全局作用域和函数作用域全局作用域——变量在任何地方都可以使用var carName = " Volvo"; // 此处可调用 carName 变量function myFunction() { // 函数内可调用 carName 变量}函数作用域——变量在函数里才可以使用function myFunction() { var carName = "Volvo"; // 函数内可调用 carName 变量}// 此处调用 carNa原创 2022-05-03 20:57:19 · 1290 阅读 · 1 评论 -
JS Array.apply()、new Array()、Array.form()的区别
本文内容有参考 Array.apply(),new Array(),arr =[] 三者的区别 文章看 vue 渲染函数的时候,发现了数组的一种新的写法,之前知道 new Array(20) 可以建一个长度为20的数组,还知道 Array.form({length: 20}) 也可以建一个长度为20的数组,可是不知道这三个的区别,所以有时间我就对这三种写法写了一个总结...原创 2022-03-20 01:06:24 · 2774 阅读 · 1 评论 -
JS 获取某年某月有多少天
/** * 获取某年某月天数 * @param {Date} date 年月 PS: 2022-03 */const getMonthDay = (date) => { let year = Number(date.slice(0, 4)) let month = Number(date.slice(5, 7)) let days = new Date(year, month, 0).getDate() return days}getMonthDay('2022-03')原创 2022-03-17 14:49:50 · 1095 阅读 · 0 评论 -
VUE map area coords自适应
<template> <div class="imgBox"> <img ref="img" :src="imgUrl" alt="" usemap="#controlmap"> <map name="controlmap"> <area ref="oil" shape="poly" :coords="coordsArr[0]" @click="enter('oil')"/> <area ref="原创 2022-03-16 18:03:53 · 1560 阅读 · 1 评论 -
js 截取字符串 subStr()、substring()、slice() 方法
1. subStr(start, length)substr() 方法可在字符串中截取从start下标开始到指定length数目的字符var str = "Hello world!";console.log(str.substr(3, 5));// lo wo没有设置 length 时默认到末尾var str = "Hello world!";console.log(str.substr(3));// lo world!2. substring(start, end)string.s原创 2022-03-16 15:09:40 · 6928 阅读 · 0 评论 -
JS 数组中元素转换类型
1. 例如 Number 类型数组转换成 String ler arr = [1, 2, 3] ; arr = arr.map(String); console.log(arr) // [ '1', '2', '3']2. String 转 Number ler arr = [ '1', '2', '3']; arr = arr.map(Number); console.log(arr) // [1, 2, 3]原创 2022-03-02 20:20:46 · 1839 阅读 · 0 评论 -
JS escape、unescape encodeURI、decodeURI encodeURIComponent、decodeURIComponent转码与解码
看这篇文章前,请先看下我的这篇文章字符集和字符编码(Charset & Encoding),提前了解下编码格式1. escape 和 unescapeescape() 它的作用是返回一个字符的Unicode编码值。采用unicode字符集对指定的字符串除0-255以外进行编码。所有的空格符、标点符号、特殊字符以及更多有联系非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。escape不编码字符有69个:*.原创 2021-12-08 16:44:52 · 421 阅读 · 0 评论 -
js 判断对象是否为空
let obj = { id: 1}console.log(Object.keys(obj).length > 0) // true原创 2021-12-02 13:59:29 · 476 阅读 · 0 评论 -
JS 两个对象数组根据id去重 / 取补集
let arr1 = [ { id: 1, name: 'a' }, { id: 2, name: 'b' }, { id: 3, name: 'c' }]let arr2 = [ { id: 1, name: 'a' }]let newArr = arr1.filter(item => !arr2.some(val => item.id === val.id))console.log(原创 2021-11-30 10:04:16 · 1114 阅读 · 0 评论 -
强大的 reduce
1、 使用 reduce 替代 map + filter设想你有这么个需求:要把数组中的值进行计算后再滤掉一些值,然后输出新数组。很显然我们一般使用 map 和 filter 方法组合来达到这个目的,但这也意味着你需要迭代这个数组两次。来看看我们如何使用 reduce 只迭代数组一次,来完成同样的结果。下面这个例子我们需要把数组中的值乘 2 ,并返回大于 50 的值:const numbers = [10, 20, 30, 40];const doubledOver50 = numbers.redu原创 2021-09-30 14:16:19 · 190 阅读 · 0 评论 -
JS 判断字符串中包含某个字符或者数组中包含某个元素方法
1. 字符串es5:indexOf()var str = "123"console.log(str.indexOf("2") != -1); // truees6:includes()let string = "apple,banana,orange";string.includes("banana"); // true2. 数组es5:indexOf()var arr = [1, 2, 3]console.log(arr.indexOf(2) != -1)原创 2021-07-27 18:17:56 · 4036 阅读 · 0 评论 -
GIT 基本操作 掌握这些就够了
git status命令用于查看在你上次提交之后是否有对文件进行再次修改。git add .可将该文件添加到暂存区git commit -m [message]提交暂存区到本地仓库git push <远程主机名> <本地分支名>:<远程分支名>将本地的分支版本上传到远程并合并git reset用于回退版本,可以指定退回某一次提交的版本$ git reset HEAD^ # 回退所有内容到上一个版本$ git reset HE..原创 2021-07-08 00:00:12 · 133 阅读 · 0 评论 -
JS中的位运算
本文部分内容取自以下文章深入研究js中的位运算及用法js中位运算的运用Js中的位运算和权限设计首先了解下计算机中常用进制 二进制 八进制 十进制 十六进制进制基数(radix)前缀示例二进制 binary0b 0B0b11 = 1*2¹+1*2º = 3八进制 octal0o 0O 00o11 = 1*8¹+1 = 9十进制 decimal无前缀11 = 11十六进制 hex0x 0X0x11 = 1*16¹+1*16º = 17.原创 2021-07-02 20:45:50 · 2385 阅读 · 3 评论 -
JS 数据类型——Boolean布尔类型
布尔值代表“真”和“假”两个状态。“真”用关键字true表示,“假”用关键字false表示。布尔值只有这两个值。下列运算符会返回布尔值:前置逻辑运算符: ! (Not)相等运算符:=,!,==,!=比较运算符:>,>=,<,<=——————————————————————————————————————————————如果布尔对象无初始值或者其值为:0-0null“”falseundefinedNaN那么对象的值为 false。否则,其值为 true(原创 2021-07-02 16:17:07 · 1620 阅读 · 2 评论 -
理解函数的执行上下文和调用栈
首先我们要知道所有的 JavaScript 函数执行时都是有上下文的。那么,什么是函数的执行上下文呢?简单说来就是函数中 this 所指向的对象。函数上下文就是函数中的 this函数中的 this 指向和函数的定义位置、执行位置无关函数中 this 的指向只取决于函数的调用方式举个栗子:function foo() { console.log(this.name);}当我们创建了一个函数的时候,我们并不知道此时的 this 指向什么,所以说创建函数的时候,我们并不知道 th.原创 2020-12-15 11:34:20 · 783 阅读 · 0 评论 -
{}、new Object()、Object.Create(null) 创建对象的区别
1. {}、new Object(){}、new Object() 一样使用let obj = {};let obj = new Object();创建对象,都会继承 object ,具有原型方法2. Object.Create(null)Object.Create(null) 方法是用来做继承的,继承一个 null,null里面什么都没有,所以就会创建一个干净的对象,不用考虑和原型链上的属性重名的问题。Object.create(null) 详解可参考——详解Object.creat原创 2020-12-03 11:23:27 · 1026 阅读 · 0 评论 -
javascript 常见的设计原则和设计模式
1. 单例模式1. 定义保证一个类仅有一个实例,并提供一个访问它的全局访问点2. 核心确保只有一个实例,并提供全局访问3. 实现假设要设置一个管理员,多次调用也仅设置一次,我们可以使用闭包缓存一个内部变量来实现这个单例class SingletonSetManager { constructor(name) { this.name = name; this.instance = null; } static getInstance(na原创 2020-09-25 16:12:51 · 415 阅读 · 0 评论 -
前端性能优化——防抖、节流
当我在做监听页面滚动,实时保存页面高度的需求的时候,发现每当页面滚动一下就会记录很多次,这对性能来说是极其不友好的,所以这时候需要给性能做一下优化1. 防抖、节流防抖和节流都能优化 js 性能,他们两个的区别是:函数节流的情况下,函数将每个 n 秒执行一次函数防抖的情况下,函数将延迟函数执行,只执行最后一次/*函数节流*/function throttle(fn, interval) { var enterTime = 0;//触发的时间 var gapTime = interv.原创 2020-08-05 10:43:20 · 479 阅读 · 0 评论 -
JS 数据类型判断 typeof instance constructor Object.prototype.toString.call()
1. typeof:console.log(typeof 1); // numberconsole.log(typeof true); // booleanconsole.log(typeof 'str'); // stringconsole.log(typeof []); // object []数组的数据类型在 typeof 中被解释为 objectconsole.log(typeof fu原创 2020-05-11 11:49:47 · 280 阅读 · 0 评论 -
es6 手写 promise 原理(进阶版)
const PENDING = 'PENDING';const RESOLVE = 'RESOLVE';const REJECTED = 'REJECTED';resolvePromise = (promise2,resolve,reject) => { if(promise2 === x) { return reject(new TypeError('Chaining cycle detected for promise #<Promise>')); } if原创 2020-05-09 17:50:45 · 271 阅读 · 0 评论 -
es6 手写 promise 原理(简单实现)
实现:const PENDING = 'PENDING';const RESOLVE = 'RESOLVE';const REJECTED = 'REJECTED';class Promise { constructor(executor) { this.state = PENDING; this.value = undefined; ...原创 2020-05-07 17:11:33 · 826 阅读 · 0 评论 -
前端 js 柯里化和反柯里化
函数柯里化currying的概念最早由俄国数学家Moses Schönfinkel发明,而后由著名的数理逻辑学家Haskell Curry将其丰富和发展,currying由此得名。本文将详细介绍函数柯里化(curring)定义:柯里化,可以理解为提前接收部分参数,延迟执行,不立即输出结果,而是返回一个接受剩余参数的函数。因为这样的特性,也被称为部分计算函数。柯里化,是一个逐步接收参数的过程...原创 2020-05-07 09:45:43 · 888 阅读 · 0 评论 -
ES5中的继承和ES6中的类继承模式详解
ES5继承1. 原型链继承function Zoo() { this.zoo = '动物园';}function panda(name) { this.name = name;}panda.prototype = new Zoo();var animal = new panda('熊猫');console.log(animal.zoo + '里面有一只' + ...原创 2020-04-06 23:46:22 · 609 阅读 · 0 评论 -
彻底弄懂 JavaScript 执行机制,同步任务、异步任务、微任务、宏任务、事件轮询
用我的理解,帮助大家弄懂 js 的执行机制在此之前,我对 js 的执行机制根本都不了解,按我的想法就是从上到下一行一行执行,对 setTimeOut 等定时器的执行机制也漠不关心,反正能执行就行,知道我最近在学习 promise 才了解到 js 的执行机制,下面我就用我的理解来简单介绍下。...原创 2020-03-17 23:37:17 · 7500 阅读 · 2 评论 -
用promise手写Ajax请求
js:function lajax(options) { options = Object.assign({ url: '', method: 'post', // 默认 post 请求 这个自定义 也可以是 get 也可以在调用的时候传 async: true, // 请求同步还是异步,默认异步 data: null, ...原创 2020-03-01 00:27:51 · 1036 阅读 · 0 评论 -
三元运算符与return
有三元运算符可以很好的代替if else简单语句但是在使用的时候发现 与 return使用的时候 需要用这种形式错误形式: val ? return 1 ? return 0;正确形式: return val ? 1 : 0;...原创 2020-01-06 18:10:34 · 4138 阅读 · 0 评论 -
js中 call、apply、bind 源码解析
写在前面call、apply、bind其实用法都差不多 都是改变 this 指向,只是后面参数的传递有些许不同call 的参数是直接放进去的,第二第三第 n 个参数全都用逗号分隔,直接放到后面 obj.myFun.call(db,‘成都’, …,‘string’ )apply 的所有参数都必须放在一个数组里面传进去 obj.myFun.apply(db,[‘成都’, …, ‘string’...原创 2020-01-06 18:05:33 · 1112 阅读 · 0 评论 -
调用函数 funtion 的方法 () 调用、call()调用、apply()调用
1. 直接调用function foo(a, b) { return a + b;}console.log(foo(1,2)) // 32. 在对象方法里调用var foo = { name: "lokka", age: "18", message: function() { return this.name + this.age; }}consol...原创 2020-01-06 14:04:28 · 373 阅读 · 0 评论 -
函数显式参数(Parameters)与隐式参数(Arguments)和arguments对象
看文档接触到了显示参数和隐式参数不懂,查了百度后给我搞的云里雾里这里我来给大家答疑解惑:1. 显示参数和隐式参数就是我们常说的形参和实参显示参数就是形式参数(形参),隐式参数就是实际传过来的参数(实参)function go(x, y) { // x, y 形参 return x + y;}go(1, 2); // 1, 2 实参如果调用函数的时候未提供实参,参数会默认设...原创 2019-12-30 16:42:15 · 1333 阅读 · 0 评论 -
JS 基本数据类型和引用数据类型的区别及浅拷贝和深拷贝
再讲 js 的基本数据类型和引用数据类型之前,我们先说一下栈和堆的概念1、栈(stack)和堆(heap)栈(stack):栈会自动分配内存空间,会自动释放,存放基本类型,简单的数据段,占据固定大小的空间。堆(heap):动态分配的内存,大小不定也不会自动释放,存放引用类型,指那些可能由多个值构成的对象,保存在堆内存中,包含引用类型的变量,实际上保存的不是变量本身,而是指向该对象的...原创 2019-12-08 23:08:37 · 2844 阅读 · 1 评论 -
JS数组与对象赋值问题
最近有群友遇到一个问题 就是给数组赋值遇到的一些问题 正好自己也不了解 就去网上查了一些资料 在这里做一下总结问题1:把 a 赋值给 b ,改变 b 的值发现 a 的值也被改变了,这和我们想象的不一样,为什么呢?// 1. 数组 var a = [1,2]; var b = a; b[0] = 3; console.log(a); // [3,2]// 2. 对象 var...原创 2019-12-05 16:22:31 · 1613 阅读 · 0 评论 -
js中的for循环、map、forEach、for in、for of、Object.keys()
遍历数组的方法:1. for 循环for 循环,大家在熟悉不过用来遍历数组或者json等对象数组var arr = [1,2,3];for(var i = 0; i < arr.length; i++) { console.log(i +'-'+ arr[i]);}// 0-1// 1-2// 2-32. forEach 遍历遍历数组 列出数组的每个元素va...原创 2019-11-15 15:32:39 · 5124 阅读 · 0 评论 -
js中字符串和数组的常用方法
字符串的常用方法charAt() 返回指定索引位置的字符charCodeAt() 返回指定索引位置字符的 Unicode 值concat() 连接两个或多个字符串,返回连接后的字符串fromCharCode() 将 Unicode 转换为字符串indexOf() 返回字符串中检索指定字符第一次出现的位置lastIndexOf() 返回字符串中检索指定字符最后一次出现的位置locale...原创 2019-11-11 14:54:28 · 388 阅读 · 0 评论 -
TypeScript 学习笔记
学习Typescript 之前 要搞清楚 javascript typescript es6 三者的关系ES6是什么ECMAScript6.0(以下简称ES6)是JavaScript语言(现在是遵循ES5标准)的下一代标准,已经在2015年6月正式发布了。它的目标,是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。ECMAScript和JavaScript...原创 2019-11-06 09:43:21 · 266 阅读 · 0 评论 -
Commonjs规范中module.exports和exports的区别
在学习Node.js时,经常能看到两种导出模块的方式:module.exports和exports。穿插一个必备小知识:在文件a.js中用exports或module.exports导出的对象(方法、变量),可以在另一个文件b.js中通过require(’./a’)引用。module和exports是Node.js给每个js文件内置的两个对象。在node.js中打印console.log...原创 2019-10-29 22:39:43 · 306 阅读 · 0 评论 -
VScode 自动编译TypeScript的配置
1. 首先安装 typescriptnpm install -g typescript2. 在当前目录打开命令行,生成tsconfig.json文件tsc --init3. 在当前目录打开命令行,生成 tsconfig.json 文件打开tsconfig.json文件修改和删除相应配置(如果想快速修改配置,请复制下列配置),不配置也可以直接使用默认配置{ "compilerOp...原创 2019-10-29 19:30:25 · 1413 阅读 · 0 评论 -
js 离开或进入浏览器页面的事件监听 visibilitychange
当用户最小化窗口或切换到另一个选项卡时,API会发送visibilitychange事件,让监听者知道页面状态已更改。你可以检测事件并执行某些操作或行为不同。例如,如果您的网络应用正在播放视频,则可以在用户将标签放入背景时暂停视频,并在用户返回标签时恢复播放。 用户不会在视频中丢失位置,视频的音轨不会干扰新前景选项卡中的音频,并且用户在此期间不会错过任何视频。使用场景:轮播图 只有在用户观看...原创 2019-10-18 11:50:59 · 5191 阅读 · 0 评论 -
JS 逻辑运算符 短路运算符的应用
首先简单说下逻辑运算符 && ||&& 例:a && b只要 && 前面是 false,无论 && 后面是true还是 false,结果都将返 && 前面的值;只要 && 前面是只要 && 前面是true,无论 &&原创 2019-02-14 10:30:51 · 4887 阅读 · 0 评论 -
原生JAVASCRIPT操作cookie方法
在前端进行操作时,有的时候要传很多参数,这个时候,我们可以把这些参数拼接到url后面进行传值,那边在接收参数,不过这样挺麻烦的,如果把这些数据放到cookie里面,就开发者的开发效率来说,我想会高一些设置cookiefunction setCookie(name,value,days) { // 设置cookie days设置过期时间 单位:天 不传默认是 cookie......原创 2018-03-07 16:13:20 · 2440 阅读 · 0 评论