JavaScript
文章平均质量分 68
flm000
这个作者很懒,什么都没留下…
展开
-
if条件为什么要进行两次取反操作
<br />今天看到这样的代码:<br />if ( !!a ){<br />……<br />}<br />很不明白为什么要进行两次非操作,于是把a取 null, 0, 1, undefined, "", 'abc', alert 这些值进行了测试,发现 if(a) 跟 if(!!a) 的判断结果完全是一样的,只不过 !!a 的类型是boolean型。<br /> <br />谁能告诉我这么做的理由是什么?原创 2010-12-01 14:20:00 · 4833 阅读 · 4 评论 -
遍历数组什么时候只能使用倒序
JavaScript里,遍历数组有时候可以用正序也可以用倒序,但在某些情况下,却只能使用倒序,不能使用正序。比如,去除给定数组里指定的值,要求在给定数组里去除,而不是返回新数组。var arr = [1,2,3,4,5,3,56,3,2,4,5,9,0,2,3,6];for(var i = arr.length; i--; ){ if(arr[i]===3){ arr原创 2013-03-04 13:53:18 · 1402 阅读 · 0 评论 -
JavaScript随机打乱数组元素的位置(洗牌算法)
function mess(arr){ var _floor = Math.floor, _random = Math.random, len = arr.length, i, j, arri, n = _floor(len/2)+1; while( n-- ){ i = _floor(_random()*len);原创 2012-10-20 16:10:22 · 2281 阅读 · 0 评论 -
用for-in循环遍历非数组对象时一些值得注意的现象(hasOwnProperty的使用)
对于非数组对象,遍历方法似乎只有使用for-in循环,但是使用for-in会遍历出一些意料之外的东西,请看下面这些现象:Object.cre = 'Obj.cre';Object.prototype.abc = 'Obj-abc';Object.prototype.bcd = 'Obj-bcd';Function.prototype.abc = 'Fn-abc';Function.原创 2012-10-28 18:23:06 · 1365 阅读 · 0 评论 -
JavaScript面向对象编程:类定义、继承、接口实现
在此之前,刚接触JS面向对象的童鞋可先阅读一下这两个系列的文章:Javascript面向对象编程 和 JavaScript继承详解。我也了解jQuery、Prototype这几个框架对面向对象的实现方式,就我个人比较的结果,最后发现还是ExtJS的实现最优雅,用那种方式开发出来的代码可读性更好(个人觉得)。可先参阅 ExtJS的面向对象相关文档。如果项目足够庞大的话,可以直接把ExtJS的原创 2012-09-25 21:11:34 · 1047 阅读 · 0 评论 -
写到prototype里的属性什么时候各实例共享值,什么时候不共享?
之前知道在一个函数的prototype里的属性是共享值的,但是不甚了解,今天自己试验了一下:var Aclass = function(){};Aclass.prototype = { cde: {a:1}, abc: 'is abc', setAbc: function(v){ this.abc = v; this.cde.a = 2;原创 2012-09-25 19:50:00 · 901 阅读 · 0 评论 -
利用HTML5的classList API优化对样式名className的操作
HTML5的classList API提供了以下几个比较有用的控制CSS样式名的方法://添加一个classelem.classList.add(classname);//删除一个classelem.classList.remove(classname);//判断一个class是否已存在elem.classList.contains(classname);//如果class已原创 2012-10-14 16:18:17 · 3031 阅读 · 0 评论 -
insertAfter方法的实现和优化
大家知道,一个DOM节点提供了原生的insertBefore方法,用于在一个节点(假设叫P)内插入一个子节点(假设叫A),同时指定A节点要插入到P的哪个子节点之前。例如P有一个子节点B,要把A节点插入到B之前直接P.inertBefore(A,B)即可,但是,现在想把A插入B之后呢?DOM节点没有原生方法可用,那只能自己写个组件方法了。先来一个最笨的方法://newEle 待插入的新节点原创 2012-10-14 00:13:20 · 855 阅读 · 1 评论 -
两个灵活高效的javascript模板渲染函数
为实现数据和展示分离,提高开发效率,方便维护,前端开发中通常需要用到渲染HTML模板的函数。今天把自己写的两个“轻量级”的分享出来。一、渲染一段简单的HTML模板 /** * 简单的渲染模板的函数 * @method * @param {String} tpl 待渲染的模板 * @param {Array | Object} dat原创 2012-06-19 15:30:04 · 1344 阅读 · 0 评论 -
JavaScript的事件广播与侦听
先来看html页面的主要结构: left: right:需求:id为test的输入框(以下简称A)值改变时,实时改变id为left和right的内容。如果这是一个小项目,一个简单的页面,那这个实现这个需求是非常简单的。但如果是一个比较复杂的项目,处理left和right都各有很多业务逻辑,需要把这两部分放在不同模块里,那么这时候就不得不考虑一种新的解决方案。而且原创 2012-09-26 19:48:22 · 9357 阅读 · 0 评论 -
JavaScript模板引擎的改进
阅读本文章之前,请先阅读 两个灵活高效的javascript模板渲染函数 ,因为这是针对那个模板引擎的改进。那个模板引擎实现原理里,在每次渲染数据之前,会先把html模板编译成一个js函数,然后遍历每条数据调用这个函数,就完成整个数据列表的渲染。改进的思路是:把html模板“编译”一次之后,就缓存起来,下次再渲染这个模板的时候,直接使用编译过的函数,而不用再次编译模板。改进的方案之一:原创 2012-09-29 11:47:50 · 525 阅读 · 0 评论 -
JavaScript异步编程之:改造世界上最短的Promise库。。。
看了这篇文章:javascript异步编程之:世界上最短的Promise库,这个虽然短,但是我觉得不是很好用,有个不足:每个函数里都要实例化一个Promise对象,完全没必要。所以花了几分钟改写了下,还增加了给then方法直接传多个函数的特性,直接看代码吧:PromisePomise//单例模式(function(){ var promise, _promise = fu原创 2013-02-25 14:15:31 · 1451 阅读 · 0 评论