dashengzi66 / note Goto Github PK
View Code? Open in Web Editor NEW学习笔记
学习笔记
const array = [5,4,7,8,9,2,7,5];
方法1
array.filter((item,idx,arr) => arr.indexOf(item) === idx);
方法2
const nonUnique = [...new Set(array)];
git branch -a # a for all
git status
git restore
git add .
git add filename
git commit -m "Add: modulename or filename: modification"
git push -u origin master 指定origin为默认主机,后面就可以不加任何参数使用git push了
git pull --rebase
git branch <branch_name>
git checkout -b <branch_name>
git branch -d <branch_name>
git branch -D <branch_name>
git push origin --delete <branch_name>
git remote add origin <source_url> 当推送到服务器时,首先要添加远程地址
git remote set-url origin <new_source_url> 当代码库远程迁移后,修改本地代码关联的远程地址
const str1 = 'abcaakjbb'
const str2 = 'abbkejsbcccwqaa'
function getMax(str) {
// \1指的是括号中匹配的内容, .匹配除换行符(\n、\r)之外的任何单个字符
const match = str.match(/(.)\1+/g);
match.sort((x,y) => y.length - x.length);
const len = match[0].length;
const obj = {};
for(let item of match) {
if(item.length <len) {
break
}else{
obj[item[0]] = len
}
}
return obj
}
// 输出 {a: 2, d: 2}
console.log(getMax(str1))
// 输出 {c:3}
console.log(getMax(str2))
let str = "zhufengpeixunzhoulaoshi";
let obj = {};
[].forEach.call(str, char => {
if (typeof obj[char] !== "undefined") {
obj[char]++;
return;
}
obj[char] = 1;
});
let max = 1,
res = [];
for (let key in obj) {
let item = obj[key];
item > max ? max = item : null;
}
for (let key in obj) {
let item = obj[key];
if (item === max) {
res.push(key);
}
}
console.log(`出现次数最多的字符:${res},出现了${max}次`);
let str = "zhufengpeixunzhoulaoshi";
str = str.split('').sort((a, b) => a.localeCompare(b)).join('');
// console.log(str);//=>"aeefghhhiilnnoopsuuuxzz"
let ary = str.match(/([a-zA-Z])\1+/g).sort((a, b) => b.length - a.length);
// console.log(ary); //=>["hhh", "uuu", "ee", "ii", "nn", "oo", "zz"]
let max = ary[0].length,
res = [ary[0].substr(0, 1)];
for (let i = 1; i < ary.length; i++) {
let item = ary[i];
if (item.length < max) {
break;
}
res.push(item.substr(0, 1));
}
console.log(`出现次数最多的字符:${res},出现了${max}次`);
let str = "zhufengpeixunzhoulaoshi",
max = 0,
res = [],
flag = false;
str = str.split('').sort((a, b) => a.localeCompare(b)).join('');
for (let i = str.length; i > 0; i--) {
let reg = new RegExp("([a-zA-Z])\\1{" + (i - 1) + "}", "g");
str.replace(reg, (content, $1) => {
res.push($1);
max = i;
flag = true;
});
if (flag) break;
}
console.log(`出现次数最多的字符:${res},出现了${max}次`);
Function.prototype.myCall = function(context) {
if(typeof this !== 'function') {
throw new TypeError('not function')
}
context = context || window
context.fn = this;
let arg = [...arguments].slice(1);
let result = context.fn(...arg);
delete context.fn
return result
}
原始值类型「值类型/基本数据类型」
对象类型「引用数据类型」
作用域就是一个变量可以使用的范围,主要分为全局作用域和函数作用域
全局作用域就是Js中最外层的作用域
函数作用域是js通过函数创建的一个独立作用域,函数可以嵌套,所以作用域也可以嵌套
Es6中新增了块级作用域(由大括号包裹,比如:if(){},for(){}等)
定义:Event Loop即事件循环,是指浏览器或Node的一种解决javaScript单线程运行时不会阻塞的一种机制,也就是我们经常使用异步的原理
宏任务和微任务都属于异步任务,一个宏任务执行结束后会查看微任务队列是否为空而去决定执行微任务还是执行下一个宏任务。
在图中: 事件循环将首先检查宏任务队列,如果宏任务等待,则立即开始执行宏任务,直到该任务运行完成,(或者任务队列为空),事件循环将移动去处理微任务队列,如果有任务在该队列中等待,则事件循环将依次开始执行,完成一个后执行余下的微任务,直到队列中所有微任务执行完毕。 注意处理宏任务和微任务队列之间的区别: 单次循环迭代中,最多处理一个宏任务,(其余的再队列中等待),而队列中的所有微任务都会被处理。 当微任务队列处理完成并清空时,事件循环会检查是否需要进行更新UI渲染。如果需要则会重新渲染UI视图。 至此,当前事件循环结束,之后将会回到最初的第一个环节,再次检查宏任务队列,并开启新一轮的事件循环。事件循环存在许多细节需要明确,如下:
红宝书:闭包是指有权访问另外一个函数作用域中的变量的函数
MDN:闭包是指那些能够访问自由变量的函数--现在MDN已经修改闭包的定义
offsetLeft 和 offsetTop 是相对于包含元素的,包含元素保存在 offsetParent 属性中。offsetParent 不一定是 parentNode。比如,td元素的 offsetParent 是作为其祖先的table元素,因为table是节点层级中第一个提供尺寸的元素
var str = "123{xxxx}(123)456[我的]789123[你的]456(1389090)789";
var regex1 = /((.+?))/g;
//正则表达式里边(.+?)表示匹配:“(”开始,其后至少含有1个除了“)”的任意字符,且再遇到“)”,就结束匹配
console.log(str.match(regex1)); //["(123)", "(1389090)"]
页面加载:beforeCreate -> created -> beforeMount -> mounted
页面关闭:beforeDestroy -> destroyed
页面数据改变:beforeUpdate -> updated
BFC是页面上一个独立且隔离的渲染区域,容器里的子节点不会在布局上影响到外面的节点,反之亦然。
堆(Heap)、栈(Stack)
ECStack(Execution [ˌeksɪˈkjuːʃn] Context Stack)和 EC(Execution Context )
GO(Global Object)和 VO(Varibale Object)
全局上下文中的this:window
块级上下文中没有自己的this,所有的this都是继承上级上下文中的this(箭头函数也是)
正常的普通函数执行:看函数执行前是否有“点”,如果有“点”,“点”前面是谁this就是谁,没有this是window(严格模式下是undefined)
function fn() {
console.log(this);
}
let obj = {
name:'asever6',
fn
}
fn();//this->window
obj.fn();//this-obj
匿名函数:
函数表达式:等同于普通函数或者事件绑定等机制
自执行函数:this一般都是window/undefined
(function(x){console.log(this)})(10);//window/undefined
回调函数:一般都是window/undefined,但是如果在函数执行中,对回调函数的执行做了特殊处理,以自己的处理为主
括号表达式:小括号中包含“多项”,这样也只取最后一项,但是this受到影响(一般是window/undefined)
(obj.fn)();//this->obj
(10,obj.fn)();//this->window(严格模式下是undefined)
定义
箭头函数表达式是传统函数表达式的一种替代方式,但受到限制,不能在所有情况下使用。因为它们有词法作用域(父作用域),并且没有自己的this和argument
Markdown支持6种级别的标题,对应html标签 h1 ~ h6
定义: 是指触发事件后在n秒内函数只能执行1次, 如果在n秒内又触发了事件, 则会重新计算函数执行时间
<div id="content" style="height:150px;line-height:150px;text-align:center; color: #fff;
background-color:#ccc;font-size:80px;"></div>
方案1--包含立即执行
let num = 1;
let content = document.getElementById('content');
function count() {
content.innerHTML = num++;
}
content.onmousemove =debounce(count,300,false);
function debounce(func, wait = 300, immediate = false) {
let timer = null;
return function anonymous(...params) {
let now = immediate && !timer;
//每次点击都把之前设置的定时器清除掉
clearInterval(timer)
//重新设置一个新的定时器监听wait事件内是否触发第二次
timer = setTimeout(() => {
timer = null; //垃圾回收机制
//wait这么久的等待中,没有触发第二次
!immediate ? func.call(this, ...params) : null;
}, wait);
//如果是立即执行
now ? func.call(this, ...params) : null;
}
}
src文件夹的别名的设置 因为项目大的时候src(源代码文件夹):里面目录会很多,找文件不方便,设置src文件夹的别名的好处,找文件会方便一些
创建jsconfig.json文件(与src同级)
{
"compilerOptions": {
"baseUrl": "./",
"paths": {
"@/*": ["src/*"]
}
},
"exclude": ["node_modules", "dist"]
}
/*
* formatTime:时间字符串的格式化处理
* @params
* templete:[string] 我们最后期望获取日期格式的模板
* 模板规则:{0}->年 {1~5}->月日时分秒
* @return
* [string]格式化后的时间字符串
*/
function formatTime(templete = "{0}年{1}月{2}日 {3}时{4}分{5}秒") {
let timeAry = this.match(/\d+/g);
return templete.replace(/\{(\d+)\}/g, (...[, $1]) => {
let time = timeAry[$1] || "00";
return time.length < 2 ? "0" + time : time;
});
}
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.