随笔分类 - [10]JS
-
JavaScript中Null和Undefined的深渊
摘要:探索JavaScript中Null和Undefined的深渊当讨论JavaScript中的原始数据类型时,大多数人都知道的基本知识,从String,Number到Boolean。这些原始类型相当简单,行为符合常识。但是,本文将更多聚焦独特的原始数据类型Null和Undefined,是什么让他们如此相似,却又似是而非。理解Null和Undefined在JavaScript中,null是字面量同时也是语言中的关键字,用来表示无法识别的对象值。换句话说,这用来表示“无值(no value)”。虽然相似,undefined实际上代表了不存在的值(non-existence of a value)。都是 阅读全文
-
Js
摘要:2014-01-05 11:01 by BarretLee,675阅读,2评论,收藏,编辑众所周知,JavaScript 的执行环境是单线程的,所谓的单线程就是一次只能完成一个任务,其任务的调度方式就是排队,这就和火车站洗手间门口的等待一样,前面的那个人没有搞定,你就只能站在后面排队等着。在事件队列中加一个延时,这样的问题便可以得到缓解。A: 嘿,哥们儿,快点!B: 我要三分钟,你先等着,完了叫你~A: 好的,记得叫我啊~ 你(C)也等着吧,完了叫你~C: 嗯!...告诉后面排队的人一个准确的时间,这样后面的人就可以利用这段时间去干点别的事情,而不是所有的人都排在队列后抱怨。我写了一段程序来解 阅读全文
-
JavaScript module pattern精髓
摘要:JavaScript module pattern精髓avaScriptmodule pattern是一种常见的javascript编码模式。这种模式本身很好理解,但是有很多高级用法还没有得到大家的注意。本文,我们将回顾这种设计模式,并且介绍一些高级的用法,其中一个是我原创的。我的问题 在我的项目中经常会在一个jsp中import包含下面这样的JavaScript代码的文件:var myBrand = { name:"xxx"};var isBrand = function(brand) { return brand === "xxx"} 在和我们公司一 阅读全文
-
实现$.fn.extend 和$.extend函数
摘要:Jquery揭秘系列:实现$.fn.extend 和$.extend函数前面我们扩展了bind方法和ready函数,这次我要讲一下$.fn.extend 和$.extend函数。其他的不多说,直接切入主题吧!先来看看这两个函数的区别:$.fn.extend是为查询的节点对象扩展方法,是基于$的原型扩展的方法 $.extend是扩展常规方法,是$的静态方法。我们之前写的代码看一下: (function (win) { var _$ = function (selector, context) { return new _$.pr... 阅读全文
-
快速web开发中的前后端框架选型最佳实践
摘要:快速web开发中的前后端框架选型最佳实践这个最佳实践是我目前人在做的一个站点,主要功能:oauth登录发布文章(我称为"片段"),片段可以自定义一些和内容有关的指标,如“文中人物:12”。支持自定义排版、插图、建立相册。多个片段可以组织在一起,形成"事件"。任意事件、片段都可以互相标记因果关系。可以follow事件或者他人。事件和片段模糊搜索。我对目前前端框架的观点已在另一篇文章中讲过,这里只介绍一下目前实践的情况。使用requirejs做模块化,上线时用r.js打包。使用avalon做数据与视图渲染框架。用page.js来管理路由。用harp来做静态资 阅读全文
-
实现 ready和bind事件
摘要:Jquery揭秘系列:实现 ready和bind事件讲这一节之前,先回顾之前的一篇《小谈Jquery》里面的代码: (function (win) { var _$ = function (selector, context) { return new _$.prototype.Init(selector, context); } _$.prototype = { Init: function (selector, context) { ... 阅读全文
-
模块加载器
摘要:相信很多人都用过 seajs、 requirejs 等这些模块加载器,他们都是十分便捷的工程管理工具,简化了代码的结构,更重要的是消除了各种文件依赖和命名冲突问题,并利用 AMD / CMD 规范统一了格式。如果你不太明白模块化的作用,建议看看玉伯写的一篇文章。为什么他们会想到使用模块化加载呢,我觉得主要是两点。一是按需加载,业务越来越大,基础代码也会越来越多,开发人员可能开发了一百个小工具,而且都塞在一个叫做 utils.js 的包里,但是一个页面可能只需要三到五个小工具,如果直接去加载这个 utils.js 岂不是很大的浪费,PC 端还好,主要是无线端,省下 1KB 那都是很大的价值啊,所 阅读全文
-
JavaScript性能优化
摘要:JavaScript性能优化如今主流浏览器都在比拼JavaScript引擎的执行速度,但最终都会达到一个理论极限,即无限接近编译后程序执行速度。 这种情况下决定程序速度的另一个重要因素就是代码本身。在这里我们会分门别类的介绍JavaScript性能优化的技巧,并提供相应的测试用例,供大家在自己使用的浏览器上验证, 同时会对特定的JavaScript背景知识做一定的介绍。目录变量查找优化变量声明带上var慎用全局变量缓存重复使用的全局变量避免使用with核心语法优化通过原型优化方法定义避开闭包陷阱避免使用属性访问方法避免在循环中使用try-catch使用for代替for…in…遍历数组使用原始操 阅读全文
-
JavaScript模板引擎
摘要:最简单的JavaScript模板引擎在小公司待久了感觉自己的知识面很小,最近逛博客园和一些技术网站看大家在说JavaScript模版引擎的事儿,完全没有概念,网上一搜这是08年开始流行起来的。。。本来以为这是很高深的知识,后来在网上看到jQuery作者John Resig,研究了一下,算是明白了最简单的javaScript模版引擎的原理,并没有想象的那么高大上,写篇博客推导一下John Resig写法的过程,写出一个最简单的JavaScript模版引擎。什么是JavaScript引擎其实在网站开发中模板还是很常见的一种技术,比如PHP的Smarty、ASP.NET的Master Page等,但 阅读全文
-
Jquery获取select,dropdownlist,checkbox下拉列表框的值
摘要:Jquery获取select,dropdownlist,checkbox下拉列表框的值jQuery获取 Select选择的Text和Value:语法解释:1. $("#select_id").change(function(){//code...}); //为Select添加事件,当选择其中一项 时触发2. var checkText=$("#select_id").find("option:selected").text(); //获取Select选择的Text3. var checkValue=$("#select_id 阅读全文
-
动手Jquery插件
摘要:自己动手Jquery插件最近Web应用程序中越来越多地用到了JQuery等Web前端技术。这些技术框架有效地改善了用户的操作体验,同时也提高了开发人员构造丰富客户 端UI的效率。JQuery本身提供了丰富的操作,但是,有时候我们需要根据我们自己的业务和系统特色(风格)构造一些我们常用的前端UI组件,而 JQuery的插件给了我们一个较好的方式来构造这些UI组件,方便我们日后反复重用这些组件。网上也有很多关于JQuery插件的文章,我也搜了一些,但是,这些文档太过离散,没有有效地组织并充分说明JQuey插件该如何编写,并且有哪几种形式,什么情况下使用哪种形式。下面,我将说明JQuery插件常用的 阅读全文
-
在线压缩JS的工具
摘要:给大家介绍款在线压缩JS的工具首先说下该工具的域名:http://javascriptcompressor.com/进入后界面如下:具体要讲下它的功能点:在线压缩 Javascript 源码可以分不同的压缩级别;比如,一般情况下,即缺省情况,它只是把空格、换行、多余的注释等等清理掉,如果选择了“Base62 encode”选项,则会对文件进行编码,使它更小;尤其当选中 Shrink variables 选项时,该在线工具会把长的变量名缩减成单个字母的变量名,压缩比通常能达到50%甚至更小。比如,我压缩20k大的一个jquery lightbox插件,普通情况可压缩到9.25k,使用“Base6 阅读全文
-
node.js module初步理解
摘要:node.js module初步理解在开发一个复杂的应用程序的时候,我们需要把各个功能拆分、封装到不同的文件,在需要的时候引用该文件。没人会写一个几万行代码的文件,这样在可读性、复用性和维护性上都很差,几乎所有的编程语言都有自己的模块组织方式,比如Java中的包、C#中的程序集等,node.js使用模块和包来组织,其机制实现参照了CommonJS标准,虽未完全遵守,但差距不大,使用起来非常简单。什么是模块在node.js中模块与文件是一一对应的,也就是说一个node.js文件就是一个模块,文件内容可能是我们封装好的一些JavaScript方法、JSON数据、编译过的C/C++拓展等,在关于no 阅读全文
-
Jquery框架
摘要:现在Jquery框架对于开发人员基本上是无人不知,无人不晓了,用起来十分的方便,特别是选择器十分强大,提高了我们的开发速度。但是好多人也只是停留在了会用的基础上,我个人觉得会用一个框架不算什么,只能说明你对那个框架比较熟悉,知道里面的思想和实现才是王道。有好多大牛对Jquery框架进行了剖析,今天我只是根据我的见解来分析一下。 一段代码如下: (function (win) { var _$ = function (selector, context) { return new _$.prototype.Init(selecto... 阅读全文
-
JavaScript之web通信
摘要:JavaScript之web通信2013-12-17 22:01 by BarretLee,94阅读,0评论,收藏,编辑web通信,一个特别大的topic,涉及面也是很广的。因最近学习了 javascript 中一些 web 通信知识,在这里总结下。文中应该会有理解错误或者表述不清晰的地方,还望斧正!一、前言1. comet技术浏览器作为 Web 应用的前台,自身的处理功能比较有限。浏览器的发展需要客户端升级软件,同时由于客户端浏览器软件的多样性,在某种意义上,也影响了浏览器新技术的推广。在 Web 应用中,浏览器的主要工作是发送请求、解析服务器返回的信息以不同的风格显示。AJAX 是浏览器技 阅读全文
-
node-webkit入门
摘要:node-webkit入门一、简介 node-webkit 是一个基于chromium与node.js的应用程序运行器,它允许开发者使用web技术编写桌面程序。通过Node.js和WebKit技术的融合,开发者可以用HTML5技术编写UI,同时又能利用Node.js平台上众多library访问本地OS的能力,最终达到用Web技术就可以编写桌面应用的目的。它提供一个跨Windows、Linux、OS X平台下的客户端应用开发的底层框架,跟移动终端上的PhoneGap等项目的原理类似。node-webkit项目位于Github上。node-webkit特点如下:使用web技术开发,HTML5、C. 阅读全文
-
关于node.js的误会
摘要:关于node.js的误会昨天写了篇博客,介绍了一下我对node.js的第一次亲密接触后的感受,以为node.js很小众,出乎我意料很多人感兴趣,并且对博客中的细节问题做了评论,最多的是围绕node.js的异步与单线程展开的,当然还有很多关于node.js究竟是不是语言?不是的话又是什么。。。之类的问题,其实刚接触node.js,了解的并不是很深入,越是回复大家问题,心里越是没底,决定认真研究一下,经人指点看了一下《Node.js开发指南》发现大部分问题都有了答案,权当一个读书笔记把问题答案分享出来,希望可以帮到一些和我一样才接触node.js的小菜关于单线程一个由来已久的误会在上篇博客中提到我 阅读全文
-
JSON无限折叠菜单
摘要:JSON无限折叠菜单编写2013-12-14 22:37 by 龙恩0707,103阅读,1评论,收藏,编辑 最近看了一篇关于JSON无限折叠菜单的文章 感觉写的不错,也研究了下代码,所以用自己编码方式也做了个demo 其实这样的菜单项在我们网站上或者项目导航菜单项很常见的一种效果,特别是在一些电子商务网上上左侧有分类是很常见的 或者说导航菜单有下拉效果也是很常见的,但是他们都是做死的 也就是页面上代码直接写死的 然后实现那种下拉效果 而今天我们是通过JSON格式来自动生成的,或者可以说 要做这种折叠菜单效果 只需要开发人员提供我们前端开发这种JSON格式或者我们前端可以定这样的格式也就o.. 阅读全文
-
node.js
摘要:让我欲罢不能的node.js从我大一接触第一门编程语言C开始,到现在工作三年陆续接触到了C、汇编、C++、C#、Java、JavaScript、PHP,还有一些HTML、CSS神马的,从来没有一门语言让我像对node.js一样的着迷。接触nodejs在我之前博客提到过在搞web socket在选择服务器的时候很多人推荐nodejs版的,无奈当时对nodejs没有任何概念,所以没看懂人家写的代码,但是感觉很熟悉,网上基本是以在服务器端运行的javascript来解释什么是nodejs,这就让我更疑惑了,javascript怎么可能做socket服务器,在用C#写出服务器后回头看了一下node.j 阅读全文
-
模版引擎
摘要:【初探Underscore】再说模版引擎前言template(templateString, [data], [settings])两年前的模板引擎初试模板源码分析Collectionseach(list, iterator, [context])map(list, iterator, [context])reduce(list, iterator, memo, [context])find(list, iterator, [context])filter(list, iterator, [context])where(list, properties)reject(list, iterato 阅读全文