![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
js基础
少油少盐不要辣
趁着年轻,去折腾,去改变吧
展开
-
element tree 设置check-strictly=true后,手动重写逻辑实现父子关联
遇到需求,就是当取消子级为按钮时,父级勾选状态不取消。所以,想了下,打算设置element tree 父子不关联,然后手动重写关联逻辑。原创 2024-06-25 21:18:57 · 321 阅读 · 0 评论 -
正则表达式之字符串的replace方法
1.首先,正则表达式是什么正则表达式是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式是对象。这些模式被用于 RegExp 的 exec 和 test 方法, 以及 String 的 match、matchAll、replace、search 和 split 方法。2.字符串的replace()方法replace() 方法返回一个由替换值(replacement)替换一...原创 2019-12-03 23:24:42 · 19132 阅读 · 0 评论 -
正则表达式replace用法实例
const reg = /\w*.(\w+)[' '|)]/gconst str = '(mc_api_age_day.f_per * mc_api_app_analysis.id)'str.replace(reg, (match, p1) => { console.log('====', p1)})结果:原创 2021-10-15 16:02:30 · 252 阅读 · 0 评论 -
防抖和节流
1.防抖是什么就是指触发事件后 n 秒后才执行函数,如果在 n 秒内又触发了事件,则会重新计算函数执行时间(防止事件回调频繁执行,一般只执行最后一次。)代码1.非立即执行版本// 这个是非立即执行版本const debounce = function (func, delay) { let timer = null return function () { if (timer) clearTimeout(timer) const args =原创 2021-03-21 18:55:08 · 128 阅读 · 4 评论 -
js为具有树结构,但元素无父元素key的数据,添加parentKey,拉平后,便于查找对应子数据
function addParentKeyWrapper(list, parentKey) { const cloneList = JSON.parse(JSON.stringify(list)) const result = [] cloneList.forEach(item => { // 一开始为null const newItem = {原创 2021-01-15 10:01:00 · 634 阅读 · 2 评论 -
将list数组转为父子结构数据(版本2)
<script> let list = [ { id: '1', title: '节点1', parentId: '', }, { id: '1-1', title: '节点1-1', parentId: '1'原创 2021-01-13 21:31:00 · 983 阅读 · 0 评论 -
js将具有父子关系的元素转换为树形结构数据
1.代码如下:分析:这里很显然是需要用到递归的。const data = [{ id: 1, name: '1', }, { id: 2, name: '1-1', parentId: 1 }, { id: 3, name: '1-1-1', parentId: 2原创 2020-08-22 08:58:12 · 761 阅读 · 0 评论 -
js遍历树结构,查找某个节点的父级元素
const treeData = [ { title: '0-0', key: '0-0', children: [ { title: '0-0-0', key: '0-0-0', children: [原创 2020-08-08 22:36:38 · 8548 阅读 · 0 评论 -
带你手动实现JS数组扁平化flat()方法
2.手动实现要点注意concat()方法的特点[3].concat([4]) // 结果为[3, 4]递归的使用 // 重写数组flat方法 // 1.会去掉数组的空项 // 2.返回新数组 Array.prototype.myFlat = function(dep = 1) { return this.reduce((acc, val) => { return acc.concat(val instanceof Array &&am原创 2020-07-11 11:09:18 · 4202 阅读 · 2 评论 -
带你手动实现bind方法,让你收获满满
// MDN:关于绑定函数,做了如下说明:指的是某一函数(目标函数)调用了bind()方法后,原地生成的函数,为绑定函数。 Function.prototype.myBind = function () { var args = Array.prototype.slice.call(arguments); var temp = Symbol.for('fn'); args[0][temp] = this; return fun原创 2020-07-04 16:13:34 · 1445 阅读 · 0 评论 -
带你手动实现Object.create()方法
1.我自己的实现 // 我自己的实现 Object.create() Object.create = function (proto, properties = {}) { let newObj = {}; newObj.__proto__ = proto; Object.defineProperties(newObj, properties); return newObj; }2.其他人的实现方式function create(proto) { functi原创 2020-06-30 23:36:13 · 793 阅读 · 1 评论 -
你真的了解map方法吗?手动实现数组map方法。
1.首先,我们来了解下使用map方法注意的要点注意:下面所说的回调函数,非箭头函数!!!所需参数,一个回调函数,一个用于改变回调函数内部this的参数。看个示例:const obj = { name: 'ha', age: 12}const arr = [1, 3, , 4];// 原生mapconst newArr = arr.map(function (e...原创 2020-05-05 11:17:25 · 899 阅读 · 0 评论 -
带你手动实现数组reduce方法
// 该方法存在构造函数的原型上,即数组实例的原型上。Array.prototype.myReduce = function (fn, initValue) { if(initValue === undefined){ let result = this[0]; for (let i = 0;i <= this.length - 2;i++) { result = fn(result, this[i+1], i, this);原创 2020-06-30 23:00:42 · 2898 阅读 · 0 评论 -
带你手动实现call方法,让你收获满满
1.首先,了解call方法的要点语法:function.call(thisArg, arg1, arg2, ...)参数:1.thisArg在 function 函数运行时使用的 this 值。请注意,this可能不是该方法看到的实际值:如果这个函数处于非严格模式下,则指定为 null 或 undefined 时会自动替换为指向全局对象,原始值会被包装。this指向:非严格模式下,指向...原创 2020-05-05 17:25:21 · 1070 阅读 · 1 评论 -
fetch请求详解
1.fetch获取资源后,会返回一个promise对象,所以可用then方法。来进行后续处理let url = './a.txt';fetch(url).then(res => { // fetch获取资源后,返回一个promise对象,所以可用then等方法。(这里的res是promise对象) res.text().then(data => { con...原创 2019-03-23 17:10:14 · 2143 阅读 · 1 评论 -
js对象的深拷贝,你真的觉得很简单吗?
1.如何实现深拷贝?1.简单粗暴使用JSON.parse(JSON.stringify(obj))存在的问题:不支持函数和正则等拷贝。let obj = { name: 'ha', friends: { name: 'zj', parent: { ...原创 2020-05-04 16:12:02 · 333 阅读 · 0 评论 -
window.open()
原创 2020-03-19 13:51:13 · 238 阅读 · 0 评论 -
es5中的arguments对象
1.是什么?MDN: arguments 是一个对应于传递给函数的参数的类数组对象。2.看个题目function a(x, y , z) { arguments[2] = 10; // arguments与参数之间有映射关系,好像 console.log(z); // 打印10 } a(1, 2, 3);arguments与参数之间有映射关系。...原创 2020-03-18 10:01:32 · 514 阅读 · 0 评论 -
js的闭包
1.什么是闭包?MDN:闭包是由函数以及创建该函数的词法环境组合而成。这个环境包含了这个闭包创建时所能访问的所有局部变量。我的理解就是:当嵌套函数访问外部函数中的局部变量时,就产生了闭包。MDN中的例子:function init() { var name = "Mozilla"; // name 是一个被 init 创建的局部变量 function displayNa...原创 2020-03-12 09:51:32 · 91 阅读 · 0 评论 -
详细示例,讲解事件循环(Event Loop)机制,看这一篇就够了。
1.浏览器中的线程有以下几种:js执行线程GUI渲染线程事件监听线程计时器计时线程网络通信线程2.如何理解js单线程?之所以说js单线程,是因为它的执行引擎只有一个线程,并且不会在执行期间开启新的线程。而并非是指浏览器单线程。...原创 2020-01-21 20:41:42 · 3267 阅读 · 0 评论 -
什么是作用域,什么是闭包,什么是作用域链
1.变量作用域指一个变量在程序的哪些地方可以被访问到。2.闭包一个函数返回了另一个函数,并且该函数使用了返回它的函数中的变量。原创 2019-12-23 19:41:41 · 688 阅读 · 0 评论 -
js数组方法map和filter比较
1.map()(1)怎么用?map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。 const newArr = arr.map((a) => { // console.log(a) return 2; }); console.log(newArr); // [2, 2, 2](2)用什么特点?(...原创 2019-11-22 00:12:50 · 1792 阅读 · 0 评论 -
类型转换之加法操作符
1.如果两个操作数都为数值,则执行常规的加法计算:(1)若一个为NaN,则结果为NaN。2.如果一个操作数为字符串。(1)另一个非对象,则执行字符串拼接操作。 '1' + true "1true" true + '1' "true1" '1' + null "1null" '1' + NaN "1NaN"(2)另一...原创 2019-11-10 16:24:54 · 152 阅读 · 0 评论 -
js获取URl查询字符串的参数,并用正则表达式匹配获取参数值
例如,一个URI为:https://mp.csdn.net/mdeditor?ad=2&amp;amp;amp;amp;wq=5首先,js获取URI查询字符串window.location.search:该方法可设置或者返回URL的查询部分得到:?ad=2&amp;amp;amp;amp;wq=5那么,如何用正则表达式匹配,并获取查询参数得值呢?用如下代码:function getQueryString(name){ va...原创 2019-01-03 22:45:39 · 6092 阅读 · 0 评论 -
js递归调用注意return返回值
递归调用函数时返回的console.log()通过打印有值,但是在获取的时候是undefined,原因是在递归函数内部没有对递归函数进行return,否则外层函数无法接收到返回值。...原创 2019-03-14 22:17:27 · 12691 阅读 · 2 评论 -
js对象属性的命名规范
1.首先,我们要知道,js对象属性命名有三种方法(1)对象字面量形式命名。这时的属性,可以是任意的字符串(包括空串和空格字符串),也可以是js的变量形式。(即以字母,下划线,$开头。后面跟字母,数字,下划线和$),还可以是纯数字。 let obj = { a1: 1, a2: 'we', 'hello world!': 23, "...原创 2019-03-31 11:12:13 · 4585 阅读 · 3 评论 -
js中[1, 2, 3] == "1, 2 ,3"吗??
1.js中比较运算符"==",发生隐式类型转换。[1, 2, 3]会被转换为字符串"1, 2, 3"。所以,[1, 2, 3] == "1, 2 ,3"是对的原创 2019-03-31 15:03:00 · 3440 阅读 · 2 评论 -
浅谈属性描述符(es5之后)
1.在ES5之前,JavaScript语言本身并没有提供可以直接检测属性特性的方法,比如判断属性是否可读。2.如何获得一个属性的描述符,或者属性的描述符有哪些? let obj = { a: 1, obj2: { b: 2 } }Object.getOwnPropertyDescriptor(obj, 'a')...原创 2019-06-23 23:07:38 · 150 阅读 · 0 评论 -
数组遍历,forEach(),ever(),some()
1.forEach()遍历数组中所有元素,并且忽略回调函数的返回值。2.every(),一直运行到回调函数返回false值。并终止遍历。3.some(),一直运行到回调函数返回true值。并终止遍历。...原创 2019-04-23 22:49:18 · 1439 阅读 · 0 评论 -
js获取时间戳,IOS中不兼容
在IOS中要这样写new Date(“2016/05/19 08:00”),该写法在安卓中也是支持的。另外,安卓中也可以这样写new Date(“2016-05-19 08:00”)。原创 2019-06-14 20:17:42 · 2549 阅读 · 5 评论 -
阻止a标签跳转
可使用<a href="javascript:void(0)">百度</a>原创 2018-12-22 17:09:46 · 1389 阅读 · 0 评论