- 博客(71)
- 收藏
- 关注
原创 移动端input呼出的键盘,换行(enter)变为搜索
1.首先,input 要放在 form里面。2. 这时 "换行" 已经变成 “前往”,3.如果想变成 “搜索”,input 设置 type="search"
2017-08-24 17:17:53 8712 2
原创 vue hash模式的缺点。
最近碰到的问题。1. 回退无法回到本来的状态。或者说不方便。比如,在一个很长的list中,点击某个item去看详情,回退会回到list的顶端。2. 无法使用锚点进行定位,与原来的路由冲突。
2017-08-02 14:55:29 4835
原创 关于“keyup”的使用
首先,说下原则。所有keyup事件都要写成节流函数,这样可以避免很多问题。附上一个简易的节流函数实现function throttle(func, wait, mustRun) { //var timeout, var startTime = new Date(); return function() { va
2017-07-21 14:54:04 1117
原创 关于IE8的坑 (不间断更新)
所有坑都是真实存在,在实际项目中遇到的。1.调试IE8的兼容问题,一定要一定要 在xp系统下进行。因为win7下的ie8和xp下的表现是不同的。虽然你可以在ie11打开F12,把模式改成IE8,我想说这没个卵用。遇到有报错的,即使不影响使用也要尽量解决,指不定在什么系统,什么浏览器,就会造成网页无法运行。2.全局变量一定要加 var,不要以为变量不加 var,就会变成全局变量。我只能送你2...
2017-07-21 10:29:49 611
转载 extend 的js实现
有个很基础的问题。我以前就知道有浅复制和深复制。也知道浅复制更改远对象会对现在的对象产生影响。知道了 深复制其实就是遇到对象和数组就循环复制。为什么这样就是深复制,就不会对原对象产生影响呢。很简单。因为 深复制 ,经过循环对象后 复制的其实都是 int string这些基础类型。这样就没有影响了。而浅复制,是直接复制对象,这样其实复制的是引用。
2017-07-06 10:42:14 217
原创 工作中的经验教训
1.即使你再有把握,即使你的代码提升很大,再优化,也不要在别人的方法上改东西。你可以自己另起一个方法,自用。2.项目上线前,不要改东西,一个标点都不要。每次改,都要提价测试组进行测试。
2017-05-11 10:50:23 1376
转载 es6学习之路(8):对象的扩展
1.属性的简洁表示法vvar target = { a: 1 };var source1 = { b: 2 };var source2 = { c: 3 };Object.assign(target, source1, source2);target // {a:1, b:2, c:3}ES6允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。var foo
2017-02-25 14:22:04 285
转载 es6学习之路(6):数组的扩展
1. Array.from()Array.from方法用于将两类对象转为真正的数组:类似数组的对象( array-like object )和可遍历( iterable )的对象(包括 ES6 新增的数据结构 Set 和Map )。下面是一个类似数组的对象,Array.from将它转为真正的数组。let arrayLike = {'0': 'a','1': 'b','2
2017-02-17 11:19:13 315
转载 es6学习之路(5):数值的扩展
1.Number.isFinite(), Number.isNaN()ES6 在 Number 对象上,新提供了Number.isFinite()和Number.isNaN()两个方法。Number.isFinite()用来检查一个数值是否为有限的( finite )。Number.isNaN()用来检查一个值是否为NaN。2.Number.parseInt(), Nu
2017-02-17 10:48:25 227
转载 es6学习之路(4):字符串扩展
1.includes(), startsWith(), endsWith()includes() :返回布尔值,表示是否找到了参数字符串。startsWith() :返回布尔值,表示参数字符串是否在源字符串的头部。endsWith() :返回布尔值,表示参数字符串是否在源字符串的尾部。2.repeat()'x'.repeat(3) // "xxx"'hello'.repea
2017-02-17 10:22:04 205
转载 es6学习之路(3):解构赋值
ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构( Destructuring )。本质上,这种写法属于 “ 模式匹配 ” ,只要等号两边的模式相同,左边的变量就会被赋予对应的值1,数组:let [foo, [[bar], baz]] = [1, [[2], 3]];foo // 1foo // 1bar // 2baz // 3let [ ,
2017-02-14 16:10:24 222
原创 es6学习之路(2):作用域,不存在变量提升,避免暂时性死区,与全局对象的属性脱钩
1、ES6 新增了let命令,用来声明变量。它的用法类似于var. const声明一个只读的常量。一旦声明,常量的值就不能改变.const声明的变量不得改变值,这意味着, const 一旦声明变量,就必须立即初始化,不能留到以后赋值。 这2个都是在所在的代码块内有效。意味着他们有自己的作用域。而且,不存在变量,所以存在“暂时性死区”的问题。 ES6 明确规定
2017-02-14 15:26:04 638
转载 es6学习之路(1) 安装
转载自 http://www.shaoqun.com/a/239505.aspx本文介绍Babel6.x的安装过程~首先呢,可以使用Babel在线转换 https://babeljs.io/repl/ 然后进入主题:安装Babel(命令行环境,针对Babel6.x版本) 1、首先安装babel-cli(用于在终端使用babel) n
2017-02-14 15:10:24 235
原创 运用setTimeout 替换 setInterval
通用的代码如下, setTimeout(function(){ //do something setTimeout(arguments.callee, time); }, time);具体的代码如下 Repeating Timers Example
2017-01-06 09:45:04 1295
翻译 惰性载入函数(使if不必每次都执行,good idear)
function createXHR(){debugger; if (typeof XMLHttpRequest != "undefined"){ createXHR = function(){ return new XMLHttpRequest(); };
2017-01-05 16:18:47 350
翻译 作用域安全的构造函数
一般的构造函数是这个样子的。function Person(name, age, job){ this.name = name; this.age = age; this.job = job; }var person1 = new Person("Nicholas", 29, "Software Engineer
2017-01-05 15:32:39 232
原创 避免因为错误而影响程序。区分致命错误和非致命错误
任何错误处理策略中最重要的一个部分,就是确定错误是否致命。对于非致命错误,可以根据下列一个或多个条件来确定:不影响用户的主要任务;只影响页面的一部分;可以恢复;重复相同的操作可以消除错误;本质上,非致命错误并不是需要关注的问题。想一下,大公司的网站就不会出问题吗,为什么他们很少出问题呢。其实可能是他们出了问题,但是我们没发现,或者是没受到影响。因此,预测一些常见的错误,
2017-01-04 22:12:58 820
转载 JSONP的优劣点
一个简单的例子 JSONP Example function handleResponse(response){ alert("You're at IP address " + response.ip + ", which is in " + response.city + ", " + response.region
2017-01-04 17:29:21 459
原创 ajax的实现,基于XHR的原理
function createXHR(){ if (typeof XMLHttpRequest != "undefined"){ return new XMLHttpRequest(); //IE8及以上和其他浏览器,不管IE6,IE7这段就行了 } else if (typeof ActiveXObject != "undefined"){ if
2017-01-04 17:10:24 473
原创 JSON.stringify和JSON.parse
标准的json,属性都要加双引号,不加或者单引号都会报错。1、JSON.stringify 这个方法接收3个参数,该方法会过滤掉 值为undefinde的属性。第一个是 json对象,第二个可以是数组或者函数,第三个参数如果是数字,代表缩进的空格字数,如果是字符串代表用该字符串代替空格进行缩进。(同时会自动换行)如果属性有个toJSON,会优先按照这个属性的方法返回 var
2017-01-03 18:14:41 429
原创 tips: hasOwnProperty和 object.property 有什么不一样呢
var a = {"test":undefined};console.log(a.hasOwnProperty("test"));// trueif(a["test"]){console.log("Y");}else{console.log("F");}// F
2016-12-14 11:04:08 244
原创 gulp 几个用法,打包,压缩,监听文件
一、首先,最重要的一点 代码的文件名必须是 gulpfile.js.二,写法1.合并多个js文件var gulp = require('gulp'), concat = require('gulp-concat'); gulp.task('testConcat', function () { gulp.src('src/js/*.js') .p
2016-11-28 15:13:46 3281
转载 gulp教程之gulp中文API
原文链接:http://www.ydcss.com/archives/424简介:本文主要翻译gulp官方API,加上自己一点点理解。gulp API docs1、gulp.src(globs[, options])1.1、说明:src方法是指定需要处理的源文件的路径,gulp借鉴了Unix操作系统的管道(pipe)思想,前一级的输出,直接变成后一级的输入,
2016-11-28 11:15:43 274
原创 利用Browsersync实现快速测试。(修改文件自动刷新,避免手动f5)
Browsersync基于node。1. 安装 npm install -g browser-sync2.命令行输入browser-sync start --server --files "css/*.css,html/*.html"。即可实现,修改css下面的任何css文件,html下面的任何html文件会自动刷新。这样会创建一个http服务器,端口为3000。3....
2016-11-28 10:55:38 709
翻译 Tips:replace()
function htmlEscape(text){ return text.replace(/[<>"&]/g, function(match, pos, originalText){ switch(match){ case "<": return "<
2016-11-22 23:29:11 209
翻译 Tips:函数的内部属性 arguments和 this
arguments是一个类数组对象,包含这传入函数中的所有参数。this 简单理解就是调用当前函数的对象arguments.callee ,这个属性是一个指针,指向拥有这个arguments对象的函数请看一个递归函数function factorial(num){ if (num return 1;
2016-11-22 00:37:00 337
翻译 tips:用闭包优雅地写出json排序方法。
function createComparisonFunction(propertyName) { return function(object1, object2){ var value1 = object1[propertyName]; var value2 = object2[prope
2016-11-21 23:34:13 354
原创 tips:js没有块级作用域。
js没有块级作用域可能会导致一些疑惑。在其他类C语言中, 由{}封闭的代码都有自己的作用域(如果用ECMAScript的话来讲,就是他们自己的执行环境)。但是 ,js没有这个概念。例如:if(true){ var color = "blue";}console.log(color);// "blue"对于有块级作用于的语言来讲 ,color会在{}的代码块执行完毕后销毁。但是js不会
2016-11-13 12:04:44 324
原创 腾讯登录做的安全处理
请求qq密码 MD5图片验证码 sign (qq+密码+验证码)合一起再进行MD5然后用户登录了 session里面去掉图片验证码id。
2016-10-21 11:20:23 332
转载 有限状态机模型
作者:流云诸葛出处:http://www.cnblogs.com/lyzg/1. 有限状态机概述简单说,有限状态机是一种模型,模型都用来模拟事物,能够被有限状态机这种模型模拟的事物,一般都有以下特点:1)可以用状态来描述事物,并且任一时刻,事物总是处于一种状态;2)事物拥有的状态总数是有限的;3)通过触发事物的某些行为,可以导致事物从一种状态过渡
2016-08-31 17:58:57 1169
原创 关于浏览器缓存的知识
1.基本认识浏览器缓存分为强缓存和协商缓存强缓存,就是浏览器直接从客户端缓存中加载资源(用于很长时间不更新的资源)协商缓存,就是浏览器想服务器发出一个请求,这个资源是从服务器拿还是从本地缓存中读取呢(协商),服务器判断这个资源没有改变,就给客户端返回一个304,告诉客户端直接从缓存读取就行。如果资源改变了,就直接返回这个资源的新版本。2.原理实现强缓存原理与实现:强缓存
2016-08-31 11:38:13 359
原创 一看就明白的图片懒加载插件lazyload
一看就明白的图片懒加载插件lazyload,直接demo lazyload .lazy { width:60px; height: 60px; } <!-- 参考地址https://github.com/jieyou/lazyload layzeload需要设置宽度高度,可以写在css文件里, --> <!-
2016-08-31 11:34:56 2073
原创 Node+express+handlebars最简单例子
新手最需要就是个实例。在网上找了许多,贴代码又不写明是哪个文件,讲一大堆不知道在说什么。下面是一个最简单的实例,就三个文件,HTML模板文件,json数据,和express2.js文件。下载后,安装module,然后直接运行express2.js即可。需要掌握的知识:1,安装node2,安装module3,运行以及访问.demo: 链接:http://pan.baidu.com
2016-08-23 09:57:16 1640
转载 Node入门
这是一本入门非常好的书,里面讲的非常非常详细,每一步都有代码实例,对我这样的入门学生非常非常友善,极力推荐,让更多的人看到。里面的模块化思想很好,只要是面向对象的语言都是相通的。关于保存图片那一步,原代码少了一句话,设置目录,我在自己的demo里已经补充。作者: Manuel Kiessling翻译: goddyzhao & GrayZhang & MondayChen
2016-08-22 12:42:25 272
原创 小tips:nodeJs找不到模块 Cannot find module 'xxx'
console.log(process.mainModule.paths);执行这个语句,就可以看到当前的module了如果你在其他地方安装了,复制到这个目录下就可以了。
2016-08-22 11:50:43 2033
原创 观察者模式与发布/订阅模式区别
最大的区别是调度的地方。虽然两种模式都存在订阅者和发布者(具体观察者可认为是订阅者、具体目标可认为是发布者,取消订阅也可以看作是取消观察者),但是观察者模式是由具体目标调度的,而发布/订阅模式是统一由调度中心调的,所以观察者模式的订阅者与发布者之间是存在依赖的,而发布/订阅模式则不会。
2016-08-11 16:46:57 200
转载 设计模式之发布/订阅模式
Observer var pubsub = (function() { //订阅者列表 var events = {}; var subUid = 0; //发布 function publish(eventName, args) { if (!eve
2016-08-11 16:43:05 211
原创 设计模式之观察者模式
Observer 点击 function ObserverList(){ this.observerList = []; } ObserverList.prototype.add = function(observer){ return this.observerList.p
2016-08-11 16:38:36 245
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人