2016年11月17日星期四
2016年11月15日星期二
2016年11月10日星期四
Google Blog 11/11/2016 (a.m.)
-
- 定义错误处理中间件时必须使用这 4 个参数
-
-
- 有些路由方法名不是合规的 JavaScript 变量名,此时使用括号记法
-
app.all()是一个特殊的路由方法,没有任何 HTTP 方法与其对应 - 如果在路由句柄中一个方法也不调用,来自客户端的请求会一直挂起
- 有助于创建模块化的路由,而且减少了代码冗余和拼写错误
- 可使用
app.route()创建路由路径的链式路由句柄
-
-
- 所有文件的路径都是相对于存放目录的,因此,存放静态文件的目录名不会出现在 URL 中
- 如果你的静态资源存放在多个目录下面,你可以多次调用
express.static中间件 - 会根据目录添加的顺序查找所需
- 如果你希望所有通过
express.static访问的文件都存放在一个“虚拟(virtual)”目录(即目录根本不存在)下面,可以通过为静态资源目录指定一个挂载路径的方式来实现
-
Google Blog 11/10/2016 (p.m.)
-
- 在ES6之前,社区制定了一些模块加载方案,最主要的有CommonJS和AMD两种。前者用于服务器,后者用于浏览器
- ES6模块不是对象,而是通过
export命令显式指定输出的代码,输入时也采用静态命令的形式
-
2016年11月8日星期二
Google Blog 11/09/2016 (a.m.)
-
数据类型 -- JavaScript 标准参考教程(alpha)
-
undefined:表示“未定义”或不存在,即此处目前没有任何值null:表示空缺,即此处应该有一个值,但目前为空
- 通常,我们将数值、字符串、布尔值称为原始类型(primitive type)的值
- 对象称为合成类型(complex type)的值
-
2016年11月7日星期一
Google Blog 11/07/2016 (p.m.)
-
Node直出理论与实践总结 | Web前端 腾讯AlloyTeam Blog | 愿景: 成为地球卓越的Web团队!
- 问题就是请求数多,前后依赖大
- 首屏展示不再需要等待 JS 文件回来,优化减少了这块时间
- 在前后端没有分离时 使用后端渲染出模板的方式是与文中所述的直出方案效果是一致的,前后端分离后淡化了这种思想,Node 的发展让更多的前端开始做后端事情,直出的方式也越来越被重视了
-
-
iframe跨域通信的通用解决方案 | Web前端 腾讯AlloyTeam Blog | 愿景: 成为地球卓越的Web团队!
- 对于现代浏览器来说,原生的postMessage API一定是不二的选择
-
2016年11月5日星期六
Google Blog 11/06/2016 (a.m.)
-
为Bash和VIM配置一个美观奢华的状态提示栏 • cenalulu's Tech Blog
- 为你的
bash,Terminal,iTerm2,VIM配置上powerline的话,那么效果将会是这样的:
-
2016年11月4日星期五
2016年11月2日星期三
Google Blog 11/02/2016 (p.m.)
-
jQuery UI Autocomplete 体验 - 囧月 - 博客园
- 如果没有指定其中一个属性则用另一个属性替代
- 对于从服务器端输出的JSON的key必须用双引号
- 注意默认传递的参数名称为term
-
-
jQuery UI API – 自动完成部件(Autocomplete Widget) | 菜鸟教程
- 指向一个能返回 JSON 数据的 URL 资源
- 通过一个
term字段添加了一个查询字符串,用于服务器端脚本过滤结果 - 例如,如果
source选项设置为"http://example.com",且用户键入了foo,GET 请求则为http://example.com?term=foo。数据本身的格式可以与前面描述的本地数据的格式相同 - 一个
request对象,带有一个term属性 - 提供单个参数:建议给用户的数据。
- 用于在请求期间提供自定义 source 回调来处理错误。
- 当过滤本地数据时,您可以使用内置的
$.ui.autocomplete.escapeRegex函数。 - 如果搜索无结果或者禁用了 Autocomplete,导致菜单未显示,该事件一样会被触发
-
2016年10月31日星期一
Google Blog 11/01/2016 (a.m.)
-
Charles抓包Localhost | Voyager-1
- Charles无法监听本地服务器
- 访问的网页无法被抓到,此时可以通过访问Mac的本地另外一个域名访问,从StackOverflow找到的,terminalname就是在终端中的用户名
-
2016年10月30日星期日
Google Blog 10/31/2016 (a.m.)
-
每天一个linux命令(7):mv命令 - peida - 博客园
- 用来移动文件或者将文件改名
- 当第二个参数类型是文件时,mv命令完成文件重命名
- 在跨文件系统移动文件时,mv先拷贝,再将原有文件删除,而链至该文件的链接也将丢失
- 目标目录在前,源文件在后
- 该选项适用于移动多个源文件到一个目录的情况
- -f 这是个危险的选项,使用的时候一定要保持头脑清晰,一般情况下最好不用加上它
- -force 一般情况不要随便用
- 如果目录dir2不存在,将目录dir1改名为dir2;否则,将dir1移动到dir2中
- 移动当前文件夹下的所有文件到上一级目录
- mv * ../
-
Google Blog 10/30/2016 (p.m.)
-
IE7识别原生[diabled]CSS属性选择器 » 张鑫旭-鑫空间-鑫生活
- <p><strong>radio单选元素[disabled]属性选择器</strong></p> <input type="radio" disabled><span>颜色是红色则支持</span>
-
2016年10月28日星期五
Google Blog 10/29/2016 (a.m.)
-
macos - Mac OS X Lion 下 Git 如何升级? - SegmentFault
- 使用
which git查看 git 发现位于/usr/bin/git目录下- /usr/bin/是系统默认自带的一些套件的存放点
- /usr/local/git
- homebrew是存放在这里
- 建议修改~/.bash_profile,加入以下内容:
export PATH=/usr/local/bin:/usr/local/sbin:${PATH}
-
-
你应该定期更新 Homebrew - David Chen 的编程大杂烩 - SegmentFault
- 要获取最新的包的列表,首先得更新 Homebrew 自己
-
-
- Mac 的最大优势是 GUI 和命令行的完美结合
- Shell是Linux/Unix的一个外壳,你理解成衣服也行
- 它负责外界与Linux内核的交互,接收用户或其他应用程序的命令,然后把这些命令转化成内核能理解的语言,传给内核,内核是真正干活的,干完之后再把结果返回用户或应用程序
- 能够让你快速上手的zsh项目,叫做「oh my zsh」,Github 网址是:https://github.com/robbyrussell/oh-my-zsh
- 相关的文件在~/.oh-my-zsh/plugins目录
- 系统默认加载 git ,你可以在后面追加内容
- 如果需要新增插件,可以这样做
- 熟练使用可以大大减少 git 的命令长度,命令内容可以参考
~/.oh-my-zsh/plugins/git/git.plugin.zsh - autojump:zsh 和 autojump 的组合形成了 zsh 下最强悍的插件
- 智能跳转(基于autojump)j 目录名(支持模糊匹配和自动补全)d (列出当前会话中访问过的目录列表,输入列表前的序号可以直接跳转)..(跳转到父目录)... (跳转到父目录的父目录)直接输入目录名即可跳转 (省略了cd命令)## 修改默认的shell为zshchsh -s /bin/zsh
-
2016年10月27日星期四
Google Blog 10/27/2016 (p.m.)
-
Git diff ^M的消除 - 博客频道 - CSDN.NET
- 如果用git diff的时候看到^M字符,就说明两个文件在换行符上有所差别
- 由于文件多了CR后造成的
- git config --global core.whitespace cr-at-eol
- 可以让git diff的时候忽略换行符的差异
- 更好的方法是每个项目都有一个.gitattributes文件,里面配好了换行符的设置
-
-
JavaScript ES6(ES2015)入门-核心特性概述 – WEB前端开发 - 专注前端开发,关注用户体验
tags: javascript es6
- ECMA-262标准的描述如下:“ ECMAScript 可以为不同种类的宿主环境提供核心的脚本编程能力,因此核心的脚本语言时与任何特定的宿主环境分开进行规定的。
- 为不同种类的宿主环境提供核心脚本编程能力
- 如果你使用
var,请总是在顶部声明你的变量- 最佳实践
- “暂时性死区”是指从代码块开始直到变量被声明的区域。
- 始终使用
class语法,并避免直接操作prototype。 - 避免使用空的构造函数。
- 使用
extends内置继承方式来实现继承。
-
2016年10月23日星期日
2016年10月22日星期六
Google Blog 10/23/2016 (a.m.)
-
Javascript模块化编程(三):require.js的用法 - 阮一峰的网络日志
- 加载的时候,浏览器会停止网页渲染,加载文件越多,网页失去响应的时间就会越长
- 由于js文件之间存在依赖关系,因此必须严格保证加载顺序
- 当依赖关系很复杂的时候,代码的编写和维护都会变得困难
- 解决办法有两个,一个是把它放在网页底部加载,另一个是写成下面这样
- 解决办法二:<script src="js/require.js" async="true" defer></script>
- data-main属性的作用是,指定网页程序的主模块。
- require()函数接受两个参数。第一个参数是一个数组,表示所依赖的模块
- 第二个参数是一个回调函数,当前面指定的模块都加载成功后,它将被调用。加载的模块会以参数形式传入该函数,从而在回调函数内部就可以使用这些模块。
-
-
Javascript模块化编程(二):AMD规范 - 阮一峰的网络日志
- 大家就想要客户端模块。而且最好两者能够兼容,一个模块不用修改,在服务器和浏览器都可以运行
- 但是,由于一个重大的局限,使得CommonJS规范不适用于浏览器环境
- 引入的模块可能加载时间过程导致整个Application都停留在那里,在浏览器的环境中经常遇到这个问题,但是在服务器上一般都不是个问题,因为模块就在本地
- 浏览器端的模块,不能采用"同步加载"(synchronous),只能采用"异步加载"(asynchronous)。这就是AMD规范诞生的背景
- AMD是"Asynchronous Module Definition"的缩写,意思就是"异步模块定义"
- 所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行
- AMD比较适合浏览器环境
- 主要有两个Javascript库实现了AMD规范:require.js和curl.js
-
Javascript模块化编程(一):模块的写法 - 阮一峰的网络日志
- "污染"了全局变量,无法保证不与其他模块发生变量名冲突,而且模块成员之间看不出直接关系
- 原始写法:将不同的函数以及变量简单地放在一起原始写法的缺陷
- 会暴露所有模块成员,内部状态可以被外部改写
- 将模块写成一个对象,将所有的模块成员都放在这个对象里面这样的写法缺点是:
- 使用"立即执行函数"(Immediately-Invoked Function Expression,IIFE),可以达到不暴露私有成员的目的
- 这种写法可以保证外部的代码无法取得内部的状态变量,从而避免被外部改写
- 如果一个模块很大,必须分成几个部分,或者一个模块需要继承另一个模块,这时就有必要采用"放大模式"(augmentation)
- 将模块model1当做参数传入一个IIFE中,就可以对这个模块进行扩展,然后返回一个model1模块
- 在浏览器环境中,模块的各个部分通常都是从网上获取的,有时无法知道哪个部分会先加载
- 使用宽方法的原因就是因为模块加载顺序不确定,单纯使用放大模式可能会导致加载了一个空对象其实宽放大模式就是在IIFF函数中设置参数可以是空对象,避免报错
- 模块内部最好不与程序的其他部分直接交互
-
2016年10月21日星期五
Google Blog 10/22/2016 (a.m.)
-
-
let声明的变量只在它所在的代码块有效 - 如果使用
let,声明的变量仅在块级作用域内有效 - 上面代码中,变量
i是let声明的,当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量,所以最后输出的是6- var a = [];for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i); };}a[6](); // 10
-
let不像var那样会发生“变量提升”现象- 我把这章的代码都放到了最新的babel 6.7.7 try it out 里面去转码,并且打开了全部特性,结果发现文中所讲的变量提升和暂时性死区与babel的行为并不相符, 我们需要明确的是现在最终运行的代码还是es5, 没必要死扣规范,建议看的过程中都把文中的es6代码用babel的官方工具去试试,看看最终是怎么转换成es5的,一来可以看看es6到底对es5增强了什么,二来可以避免一些预想不到的错误
- 只要块级作用域内存在
let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响- 这个问题和变量提升是一样的 我们在ES6/Babel是看不到预想的结果的
- 在代码块内,使用let命令声明变量之前,该变量都是不可用的
-


