- 博客(26)
- 收藏
- 关注
转载 发布订阅模式
不同的语言,相同的模式。最近在关注设计模式的知识,发布订阅模式其实是对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖与它的对象都将得到状态改变的通知。作用:1、广泛应用于异步编程中2、对象间松散耦合的编写代码自定义事件:let corp={}; //定义一个公司对象//这里放一个列表来缓冲回掉函数crop.list = [];//去订阅事件corp.on = function(f...
2018-06-07 17:28:40
555
转载 H5中SVG的使用
一、SVG-可缩放矢量图形1、什么是SVG SVG是一种使用XML技术描述二维图形的语言,SVG是一种矢量图。 并不属于H5专有内容,在H5出现之前,就有SVG内容,不过H5提供了SVG原生内容。 SVG扩展名为.SVG。2、SVG的优势 可通过文本编辑器来创建和修改 图像中的文本是可选的,同时也是可搜索的(适合制作地图) ...
2018-06-07 11:26:35
6282
原创 switch...case AND if...else
1、常用的方法是基于测试条件的数量判断,测试条件较多时使用switch...case,测试条件较少时使用if...else。2、维基百科搜索switch...case相关资料发现,在编译器中会将一系列语句编译成分支表,在判断时无需像if...else一样进行一个个逻辑判断,而是通过case的值,对值进行搜索,从而达到搜索优化。3、if...else语句会对一个个条件进行顺序性逻辑判断,知道找到符合...
2018-05-23 14:05:06
468
转载 变量的解构赋值
ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。以前对变量赋值,只能直接指定值。ES6之后允许写成下面这样:let [a,b,c] = [1,2,3];上面代码表示,可以从数组中提取值,按照对应位置,对变量赋值。本质上,这种写法属于“模式匹配”,只要等号两边模式相同,左边的变量就会被赋予对应的值,下面是一些使用嵌套数组进行解构的例子:let [foo, [[bar], ...
2018-03-06 18:16:19
170
转载 用canvas的toDataURL将图片转化为dataURL(base64)
dataURL:先大致回顾一下正统的dataURL语法,这有助于我们检验转换后的内容是否正确。一个完整的dataURL应该是这样的data:[<mediatype>][;base64],<data>其中mediatype声明了文件类型,遵循MIME规则,如“img/png”、"text/plain";,之后是编码类型,这里我们只涉及base64;紧接着就是文件编码后的内容了...
2018-03-06 16:26:25
5759
转载 web安全与CSP
内容安全策略 (CSP, Content Security Policy) 是一个附加的安全层,用于帮助检测和缓解某些类型的攻击,包括跨站脚本攻击 (XSS) 和数据注入等攻击。这些攻击可用于实现从数据窃取到网站破坏或作为恶意软件分发版本等用途。内容安全策略在现代浏览器中已经包含,使用的是 W3C CSP 1.0 标准中描述的 Content-Security-Policy 头部和指令。那么如何应...
2018-03-05 14:39:46
394
转载 前端安全-XSS主动防御
通俗篇:xss俗称跨域脚本攻击,是最常见的web攻击,其重点是跨域和客户端执行。目前手头开发的一个项目,被利用input提交<img onerror="alert(123)">到后端,进而将其存储进数据库,导致再次读取显示该内容时出发alert执行。遂~,上网找大家的解决办法,最常用的解决办法就是转移、过滤。这里有一个比较通顺的xss存储攻击:基于存储的xss攻击,是通过发表带有恶意跨...
2018-03-01 16:10:11
591
原创 promise
在JavaScript世界里,所有代码都是单线程执行的。由于这个“缺陷“,导致JavaScript的所有网络操作,浏览器事件,都必须是异步执行,异步执行可以用回调函数实现。function callback() { console.log('Done');}console.log('before setTimeout()');setTimeout(callback, 10
2018-02-01 15:50:18
169
原创 阮大大的koa教程学习
node主要用于开发web应用,所以使用node往往离不开web框架。koa就是很好的web框架,本身只有1000多行,所有功能都通过插件实现,很符合Unix哲学。一、基本用法1、koa可被视为node中http模块的抽象,const Koa = require('koa');const app = new Koa();app.listen(3000);三行代码就可假
2018-01-31 15:19:00
366
原创 git 下的冲突解决
冲突的产生:很多命令都可能出现冲突,但从根本上来讲,都是merge和patch(应用补丁)时产生冲突。而rebase就是重新设置基准,然后应用补丁的过程,所以也会冲突。git pull会自动merge,repo sync会自动rebase,所以git pull和repo sync也会产生冲突。当然git rebase就更不用说了。冲突的类型:逻辑冲突:git自动处理(合并/应用
2018-01-29 17:19:34
349
原创 前端组件化 VS 单例模式 (字面量/函数闭包)
---->作用域隔离(单例模式--对象字面量)通常项目开发的时候我们都会意识到通用的功能应该封装成组件,随时调用。但光有意识有的时候却无从下手,可能一开始会把一个功能单独写在一个文件里面,script标签引入,全局函数全局变量的写法。函数里面定义变量,dom操作,逻辑代码编写,直到实现功能。对于入门级码农来讲做到这一步,其实已经是有了本质上的进步,毕竟都是从这一步过来的。然而这么做导致的问题是:变
2018-01-19 16:03:13
258
转载 koa-router
我们使用router.get('/path',async fn)来注册一个get请求,可以在请求路径中使用带变量的/hello/:name,变量可以通过ctx.params.name访问。//导入koa,和koa1不同,我们导入的是一个class,因此用大写的Koa表示const Koa =require('koa');//注意require("koa-router")
2018-01-10 11:07:44
528
原创 koa入门
首先搭建一个koa服务示例://导入koa,和koa1不同,我们导入的是一个class,因此用大写的Koa表示const Koa =require('koa');//创建一个KOA对象表示 web app本身const app =new Koa();//对于任何请求app将调用该异步函数处理请求app.use(async (ctx,next)=>{awa
2018-01-10 09:50:27
225
转载 for...of循环和for...in循环的区别
for...in循环因为历史遗留问题,它遍历的其实是对象的属性名称。一个Array数组实际上也是一个对象,它的每个元素的索引被视为一个属性。于是当我们手动给Array对象添加了额外的属性后,for...in循环将会将新的属性跟之前的索引值一起循环出来。但是Array的length属性却不包括在内。for...of循环则完全修复了这些问题,它只循环集合本身的元素。for...in循环用于
2018-01-09 15:03:25
914
原创 ES6--generator
generator(生成器)是ES6标准引入新的数据类型, 一个generator看上去像一个函数,但可以返回多次。ES6中generator的定义借鉴了python的generator的概念和语法。------------------------------------------------------------------------------------------------
2018-01-08 15:01:00
266
转载 koa简介
koa是Express的下一代基于node的web框架,express对node的http进行了封装:var express =require('express');var app =express();app.get('/',function (req,res) {res.send('hello word!')});app.listen(3000,func
2018-01-08 14:30:39
584
转载 node中crypto模块
crypto模块的目的是提供通用的加密和哈希算法,用纯javascript代码实现这些功能不是不可能,但是速度会非常慢,node用c/c++实现这些算法后,通过crypto模块暴露为js接口,这样用起来方便,速度也快。MD5是一种常用的哈希算法,用于给任意数据一个‘签名‘,这个签名通常用一个十六进制的字符串表示:const crypto =require('crypto');
2018-01-08 13:45:50
384
转载 node中http模块
node自带的http模块,连接、解析等基础功能,所以应用程序并不直接和http协议打交道,而是操作http模块提供的request和response对象。request对象封装了http请求,我们调用request对象的属性和方法就可以拿到所有http请求的信息。response封装了http响应,我们操作response对象的方法就可以把http响应返回给浏览器。用node实现的h
2018-01-05 15:33:35
522
转载 node中的stream模块
stream是node提供的又一个仅在服务区端可用的模块,目的是支持流这种数据结构。流是一种抽象的数据结构(标准输入流/标准输出流),可以用来读取和写入数据。在node中,流也是一个对象,我们只需要响应流的事件就可以了:data事件表示流的数据已经可以读取了,end事件表示这个流已经到末尾了, error事件表示出错了。'use strict'var fs = requ
2018-01-05 13:45:59
309
原创 node中fs模块
node引用fs模块,异步读取文件:'use strict'var fs =require('fs');fs.readFile('example.txt','utf-8',function(err,data) {if (err) {console.log(err)}else{console.log(data)}})node引用fs
2018-01-04 17:06:33
336
转载 node基本模块
global是在node环境中唯一的全局对象。process也是node提供的一个对象,它代表当前node的进程。node进程本身的事件就由process对象来处理。
2018-01-04 16:01:53
197
转载 module.exports VS exports
很多时候可以看到,在node中有两种方法可以输出变量:方法一:对module.exports赋值:function hello(){console.log('hello word');}function greet(name){console.log('hello'+name);}module.exports = {hello:hello,greet:gre
2018-01-04 14:55:32
194
转载 nodeJs中的CommonJs 规范理解
node中使用commonJs规范实现模块记载机制,在这个规范下每个.js文件都是一个模块,他们内部各自使用的变量名函数名互不冲突。一个模块要想对外暴露变量(函数也是变量),可以用module.exports = variable;,一个模块要想引用其他模块暴露的变量,用var ref = module.exports("module_name");就拿到可引用模块的变量。
2018-01-04 10:59:06
868
转载 javascript有关this的
前面已经说过,this在任何位置都可以取到值,所以在执行上下文环境中this会被赋值,但是有一点需要说明:在函数中this到底取何值,是函数在被真正调用的时候确定的,因为函数每调用一次都会生成一个新的执行上下文环境。接下来分四种情况讨论一下this的取值:情况一:构造函数所谓构造函数就是用来new对象的函数,所有的函数都可以new一个对象,但是有些函数的定义是为了new一个对象
2017-12-27 13:43:19
135
转载 javascript-----执行上下文环境(二)
本文介绍函数中执行上下文环境,function f(x){console.log(arguments); ==> [10]console.log(x); ==>10 } f(10);上述函数输出结果显示,在函数的语句执行之前,arguments变量和函数的参数都已经被赋值,所以函数每被调用一次都会产生一个新的上下文执行环境,因为不同的调用可能会有不同的
2017-12-26 20:23:43
156
转载 javascript---执行上下文(一)
执行上下文 (同名:执行上下文环境);首先看个例子:控制台直接输入 console.log(a); ==> a is not defind;控制台输入 console.log(a); ==> undefind; var a;控制台输入 console.log(a); ==> undefind; var a = 10; 分析:第一句a
2017-12-26 19:52:35
201
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人