javascript
文章平均质量分 88
Neil-
吾日三省吾身~
展开
-
前端blob数据
Blob介绍定义Blob 对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也可以转换成 ReadableStream 来用于数据操作。 通常可以用于声音、视频等多媒体文件的存储;构造new Blob(blobParts, options);blobParts:数组类型,可以存放任意个ArrayBuffer、ArrayBufferView、Blob或DOMString(会编码为utf-8);options:可选,可以设置blob的type和endings;原创 2022-10-01 11:04:45 · 3920 阅读 · 1 评论 -
git大小写不敏感,仅修改文件名或文件夹名称无法提交commit
问题描述:在使用git的过程中,有时会遇到仅需要改变文件名大小写或者文件夹名大小写的情况——比如不小心把组件名首字母小写了,需要改为大写。但windows下git默认是忽略大小写的,如果仅改动文件(夹)名,git并不能检测到diff,所以不能进行commit提交;解决方案通常可以使用以下两种方式:通过git配置文件修改配置core.ignorecasegit config core.ignorecase false使用命令git mv:git mv -f OldFileNameCase n原创 2020-07-10 14:56:36 · 2159 阅读 · 0 评论 -
mobx入门教程
背景React的自身的状态本身由state和setState维护;但是随着应用复杂度的提升(组件间状态共享及状态变更),单纯通过setState进行状态管理的方案不仅变得代码复杂、难以维护,而且影响可扩展性;针对这种状况,React目前主要有Redux和mobx两种解决方案(均可以让状态逻逻辑从展示组件等解耦出来,提高扩展性与复用性);mobx与Redux有什么不同?Redux采用F...原创 2020-03-05 13:39:46 · 1748 阅读 · 0 评论 -
最小栈
问题描述:实现一个最小栈,包含以下方法:push、pop、getMin(返回栈中最小值)分析:由于栈具有push和pop方法,因此栈中的最小值是不固定的;因此可以通过维持另一个栈B用于保存历史最小元素的下标;每次入栈时判断入栈元素是否小于当前最小元素,小于则更新最小值同时将其下标保存在栈B中;每次出栈时判断出栈元素是否为当前最小元素,是则同时将栈B中的栈顶元素出栈;此时栈B的栈顶仍然是栈...原创 2019-12-06 18:24:02 · 346 阅读 · 0 评论 -
ES6 Proxy
定义及用法ES6引入了Proxy可以为代理对象的基本操作设置一些自定义操作;基本用法:var p = new Proxy(target, handler);typeof p === 'object'; // truetarget:被代理对象,可以是任意类型的对象,包括数组、函数及proxy等;handler:一个对象,其每个属性为函数,用于定义代理的行为;可以用于数据合法性校验或数据预...原创 2019-11-29 21:33:06 · 115 阅读 · 0 评论 -
LeetCode 20题:括号匹配问题
问题描述Given a string containing just the characters ‘(’, ‘)’, ‘{’, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.An input string is valid if:Open brackets must be closed by the same type o...原创 2019-11-12 16:42:20 · 528 阅读 · 1 评论 -
JavaScript 工具函数介绍(与数组结合)
Array.prototype.reduce()参数Array.prototype.reduce(callback(accumulator, currentValue[, Index[, array]]) [, initialValue])介绍:该函数接收两个参数callback与initialValue,其中第二个参数可选;callback可以接受四个参数:分别为初始累加器值、当前值、索...原创 2019-10-29 20:08:14 · 183 阅读 · 0 评论 -
CSS图形绘制
圆使用border-radius特性;代码实现,具体可见jsfiddle.net <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>CSS图形绘制</title></head><body> &...原创 2019-10-25 19:47:57 · 359 阅读 · 1 评论 -
React Hooks
引言从React 16.8版本开始,新增的React hooks可以让用户在不用创建react class的同时可以使用state等react属性;React为什么引入hooks?引入hooks可以将很多之前以类的形式表现的组件以函数的形式呈现,也不必从React中引入Component,不用再使用冗余的class语法,代码结构更加简洁;引入hooks之后,可以将React的state...原创 2019-10-12 21:11:51 · 415 阅读 · 0 评论 -
xss攻击解析
XSS攻击(Cross site Scripting),跨站脚本攻击,通过插入恶意脚本并在用户浏览页面时主动或者被动触发的一种攻击方式;XSS一般分为反射型和存储型;反射型反射型XSS攻击是为形象描述它的路径而产生的名称,指的是恶意脚本以查询字符串的形式在用户发出请求时的URL中,提交给服务器后服务器会进行相应的解析,然后将带有XSS代码的响应返回给浏览器,浏览器会解析响应中的XSS并执行;这个过程原创 2017-09-17 12:23:11 · 893 阅读 · 0 评论 -
JS 去抖(debounce)与节流(throttle)
函数防抖与节流 debouce/ throttle定义:函数去抖的含义就是在一定时间段内只有一个同类的事件触发并执行;如果该时间段有同类的事件触发,则重新开始响应该事件;实例:输入合法性检测、浏览器resize时自身的处理、scroll事件等代码:let timer;function debouce (fn) { clearTimeout(timer); timer = setTimeout(() ...原创 2018-08-28 11:44:09 · 782 阅读 · 0 评论 -
Node.js笔记
使用npm安装的包有两种模式:全局模式和本地模式。默认是以本地模式安装的,也就是说没有添加到path环境变量中。而全局模式安装的包一般也不可以直接在本地目录使用require引用到。 为此,npm提供了npm link可以实现本地包与全局包之间创建符号链接,从而可以使用require直接引用全局安装的包;使用npm进行包的发布,首先需要注册一个npm账号,使用npm adduser或者npm l原创 2017-12-24 01:13:44 · 241 阅读 · 0 评论 -
牛客网前端编程环境Chrome V8模拟
在牛客网的在线编程使用JS(Chrome V8)编译环境进行编程时,输入输出以及本地的调试问题一直比较棘手;以下给出的例子很简单,可以应对一些简单常见的输入输出,方便本地进行快速调试;输入function readline () { var str = window.prompt(); return str;}输出 function print (str) { if原创 2017-10-01 00:53:41 · 960 阅读 · 0 评论 -
函数柯里化
要求: 实现函数sum(1)(2)(3) = 6;方法一:直接使用闭包:function sum (a) { return function (b) { return function (c) { return a + b + c; } }} 缺点: 这种方法能够非常便捷的实现题设要求;但是,其自适应性太差;比如要实现s原创 2017-09-12 17:18:20 · 418 阅读 · 0 评论 -
JavaScript中怪异现象true和false
转载自GitHub:https://github.com/denysdovhan/wtfjs#true-is-false以下内容节选自上述链接地址:转载 2017-10-02 00:42:20 · 413 阅读 · 0 评论 -
CVTE前端开发在线笔试-2017.9.14
1、截取子串:字符串中含有汉字(作为2个字节),实现一个函数subStr(str, len),假设str为‘我ABC汗DEF’,当len为4时应输出‘我AB’,当len为6时输出‘我ABC’代码实现如下:function subStr (str, len) { if (Object.prototype.toString.call(str) !== '[object String]' || O原创 2017-09-14 22:05:00 · 951 阅读 · 1 评论 -
JS实现单链表
函数功能:实现单链表的初始化,插入节点、删除节点、查找节点和删除节点功能;/** * 单链表构造函数 */function LinkedList () { this.ptr = null; this.head = null; this.length = 0; this.insert = insertNode; this.delete = deleteNod原创 2017-09-19 10:47:04 · 824 阅读 · 0 评论 -
笔记 —— 类型和语法
类型内置类型:null、undefined、boolean、number、string、object、symbol(es6);null的判断var a = null;!a && typeof a == "object" // truetypeof 类型判断typeof null === 'object' // truetypeof undefined ...原创 2019-03-22 23:08:03 · 248 阅读 · 0 评论 -
笔记 —— 异步与回调
异步JavaScript引本身没有时间的概念,只是一个按需执行任意JavaScript代码片段的环境。“事件”(JavaScript代码的执行)调度由包含它的宿主环境进行;Javascript设计为单线程的原因:与其作用相关。作为浏览器脚本语言,主要作用是用户交互,以及操作DOM,单线程的设计可以避免很多多线程带来的同步问题。比如,在不同的线程对同一DOM做了不同的修改。HTM...原创 2019-04-15 14:46:10 · 821 阅读 · 0 评论 -
js array属性及方法
arr.lengtharr.concat(arr2, arr3, …):参数为一系列数组,不会改变旧数组,返回一个新数组;var arr = [1, 2, 3];arr.concat(); // [1, 2, 3]arr.concat(4, 5); // [1, 2, 3, 4, 5]arr.concat([6, 7]); // [1, 2, 3, 6, 7]arr.concat([4...原创 2019-05-15 15:08:55 · 1933 阅读 · 0 评论 -
达夫设备 JavaScript
循环体在程序的执行过程中是一个开销非常大的操作,有效的优化可以很好的提升性能。循环性能的优化可以通过减少循环次数和降低每次循环的开销两方面入手。对于降低每次循环开销,可以使用局部变量缓存一些需要经常查询的类型,比如数组长度等;关于减小循环次数,可以使用Duff’s Device。 Duff’s Device即达夫设备,是一种通过展开循环体从而限制循环迭代次数的方法,其实质是在一次迭代中执行了原循环原创 2017-06-17 00:32:01 · 666 阅读 · 0 评论 -
React 新版本特性说明
1.React 16版本以前渲染一个组件最外层有时要使用到一个无意义的<div>元素作为包裹元素,否则会报错;React 16.2版本以后,新增了react.fragment API,不需要外层有包裹元素时,可以使用<></>或者<Fragment></Fragment>(需要导入`import React, { Fragment } f...原创 2019-12-04 16:45:28 · 802 阅读 · 0 评论 -
nginx基础入门
本文所述nginx配置及测试在window环境下进行;下载移步官网常用的几个命令行参数启动nginx可以直接使用nginx或者nginx -c file.conf-c file.conf: 使用单独指定的配置文件file.conf而不是默认的配置文件nginx/conf/nginx.conf;-v: 查看nginx的版本信息;-V: 查看nginx的版本信息、编译版本及配置参数...原创 2019-06-13 00:18:08 · 483 阅读 · 0 评论 -
一个有趣的闭包问题
问题描述: 根据以下代码写出对应的输出function fun(n,o) { console.log(o); return { fun:function(m){ return fun(m,n); } };}case1:var a = fun(0); a.fun(1); a.fun(2); a.fun(3);case2:var b = fun(0)....原创 2019-05-17 17:50:27 · 144 阅读 · 0 评论 -
简单动态规划:递归及非递归方法
问题描述:给定金字塔结构的一组数,求从底部到顶部的最大路径(最小路径);不记录路径,只需返回最大路径值;非递归方法:var arr = [ [8, 10, 11, 16, 8], [12, 23, 0, 20], [9, 10, 3], [6, 7], [5]];function maxPathIt(arr, i, j) { ...转载 2019-05-16 19:32:02 · 946 阅读 · 0 评论 -
算法:找出字符串中仅出现一次的第一个元素并返回;
问题描述:输入:一个字符串;操作:找出字符串中仅出现一次的第一个字符并返回;输出:满足条件的字符;示例:输入: ‘abcefagebc’输出:‘f’;常规解法:常规解法即使用双层循环嵌套,知道找到满足条件的字符直接返回,时间复杂度为O(n^2);function findStr(str) { var l = str.length; var flag; fo...原创 2019-05-16 16:39:26 · 406 阅读 · 0 评论 -
js正则表达式
正则表达式的创建字面量形式:var re = /abc/;var re2 = /abc/i;var re3 = /abc/g;RegExp构造函数:new RegExp('abc');new RegExp(/abc/);new RegExp(/abc/, 'gi');正则表达式属性var re = /a|b/ig; // i: ignoreCase, g: globa...转载 2019-05-21 15:03:36 · 97 阅读 · 0 评论 -
js字符串处理函数
String.fromCharCode(num1, …, numN) :返回由指定的UTF-16代码单元序列创建的字符串;String.fromCharCode() 方法不能单独获取在高代码点位上的字符;需要使用String.fromCodePoint(num1[, …[, numN]]);String.fromCharCode(48, 49, 50); // '012'Strin...原创 2019-05-15 20:42:00 · 604 阅读 · 0 评论 -
每日一诗词 —— 定风波·莫听穿林打叶声
定风波·莫听穿林打叶声苏轼 莫听穿林打叶声,何妨吟啸且徐行。 竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。 料峭春风吹酒醒,微冷,山头斜照却相迎。 回首向来萧瑟处,归去,也无风雨也无晴。转载 2017-09-06 23:47:48 · 1700 阅读 · 0 评论 -
域名发散与域名收敛
浏览器的并发限制:浏览器对于同一域名下允许的并发请求数作了限制,通常同一域名下最大并发请求数为6个;原因: 1、为了适应当时服务器的负载能力;之前的服务器的负载能力并没有这么强,高并发的请求可能会导致服务器无法正常提供服务甚至崩溃; 2、如果浏览器允许的最大并发请求书较大,容易造成DDoS(Distributed Denial of Sevice)攻击等安全隐患; 3、过多的并发请求可能会造成原创 2017-09-06 19:50:46 · 1325 阅读 · 0 评论 -
JS 性能提升
作用域避免全局查找 全局变量和函数的由于需要沿着作用域链进行查找,开销大于局部变量;因此,涉及到多次访问同一个全局变量时,可以先将其保存在一个局部变量中用于后续调用,这样可以降低一些开销;避免使用with语句 由于调用with语句会临时创建一个单独的作用域,延长了作用域链,因此增加了作用域链查找开销,应当尽量避免;选择正确的方法避免不必要的属性查找原因前边已经说了,这是一个复杂度为O(n)的操作原创 2017-08-28 00:20:15 · 301 阅读 · 0 评论 -
JavaScript基本包装类型
ECMAScript提供的引用类型包括Object、Array、Date、RegExp和Function; ECMAScript还提供3个特殊的引用类型:Boolean、Number、String,称为基本包装类型; - 基本包装类型与引用类型的生命周期不同,引用类型实例在当前作用域中执行时一直保存在内存中;基本包装类型的实例对象只存在与代码执行的瞬间,之后会立即销毁; - 使用Object构造原创 2017-08-09 21:01:31 · 302 阅读 · 0 评论 -
JS正则表达式
JS正则表达式的创建方式有两种:字面量形式和RegExp()构造函数; 正则表达式的三种匹配模式:g(global)、i(case-insensitive)、m(multiline);JS正则表达式的元字符:( [ { \ ^ $ | ? * .} ] ),使用字面量进行创建时元字符需要进行转义,使用RegExp构造函数创建时则需要双重转义; RegExp实例属性包括global、ignoreCa原创 2017-08-08 16:17:53 · 220 阅读 · 0 评论 -
Date类型
Date类型时间的起始点为UTC格式的1970.1.1零时 创建日期对象使用下列方法,默认传递的参数是从上述的时间起点到该日期经过的毫秒数;因此可以通过Date.parse()和Date.UTC()更方便的进行参数传递;使用new Date()会根据传递的参数类型分别调Date.parse()或者Date.UTC()var d = new Date(); //Date.parse()方法接收一个原创 2017-08-07 19:47:11 · 525 阅读 · 0 评论 -
JavaScript提高效率之编程实践
避免双重求值 所谓的双重求值是指一段JS代码在另一端JS代码中执行,常见的Function()构造函数、eval()、定时器(setTimeout和setInterval)就是典型的例子。 通过双重求值代码执行速度比直接执行代码速度慢很多,应尽量避免这种情况。使用Object/Array直接量 使用直接量或字面量会使代码执行速度更快。避免重复工作 下边的例子中每次调用addHandler原创 2017-06-26 19:31:11 · 353 阅读 · 0 评论 -
Array.prototype.reduce统计数组中各元素出现次数
Array.prototype.reduce可以实现很多功能,统计数组中各元素出现次数也是其中一个,代码如下:var arr = [1,2,35,33,5,3,3,23,5,6,1,44,33,6];var count = arr.reduce(function(allElements, ele){ if (ele in allElements) { allElements[原创 2017-06-29 13:04:55 · 2222 阅读 · 0 评论 -
JS arguments对象
arguments是所有函数内部可以使用的一个局部变量,是一个类数组对象。之所以说是类数组对象,是因为它具有Array一样的length属性,但是其不具备Array的其它属性。var arr = [];arr instanceof Array; // true;function f() {console.log(arguments instanceof Array);}f(); //falsea原创 2017-06-20 01:45:59 · 303 阅读 · 0 评论 -
Javascript二叉搜索树实现
基本知识二叉树:二叉树的所有结点的最大度数为2; 二叉搜索树:又称为二叉排序树,根节点与其左右子结点的满足以下关系:左子结点<根结点<右子结点; 完全二叉树:除最后一层外,其它各层达到该层最大结点数;结点为n的完全二叉树深度为log2(n+1); 第i层的最大结点数:2^(i-1); 深度为h的最大最大总节点数:2^h-1;function BinarySearchTree() { /*原创 2017-06-08 02:31:46 · 390 阅读 · 0 评论 -
正则表达式用于模式匹配的String方法
正则表达式的模式匹配的常用String方法有五类:search()/replace()/match()/exec()/split() 下边将分别进行介绍:search() search()方法主要用于检测字符串中与正则表达式匹配的第一个子串,需要注意的是其不支持全局匹配,所以即使设置g标志也没用。 示例如下:"JavaScript".search(/script/i);replace()r原创 2017-05-25 23:11:10 · 1229 阅读 · 0 评论 -
JavaScript并发模型
本译文的原文 from Carbon Five: 本译文的主要目的是让你对事件驱动模型有一个基本了解,并且能够区分其与在Java、Python、Ruby等语言中使用的请求-应答模型。内容涉及到JavaScript并发模型的一些核心概念,主要包括事件轮询(event loop)和消息队列(message queue)。非阻塞I/O在JavaScript中,几乎所有的I/O都是非阻塞的,包括HTTP请翻译 2017-05-24 02:33:44 · 2445 阅读 · 0 评论