js-小技巧(1)
来源:互联网 发布:阿里巴巴软件开发人员 编辑:程序博客网 时间:2024/06/06 04:21
js中的小技巧很多,一时也没办法全部整理出来,所以可能分好几次发。
1、类型判断-(节取自jQuery)
js较常用的类型判断应该是typeof和instanceof这两个操作符了,但效果其实不尽如任意,因为他们通常只简简单单的提示一个"object"。所以下面的类型判断的方式选自jQuery库:
(function(undefined){var $=function(){}, class2type={}, toString=class2type.toString;function likeArray(obj) { return typeof obj.length == 'number' }$.each=function(elements, callback){var i, keyif (likeArray(elements)) { for (i = 0; i < elements.length; i++)if (callback.call(elements[i], i, elements[i]) === false) return elements} else { for (key in elements)if (callback.call(elements[key], key, elements[key]) === false) return elements}return elements}function type(obj){return obj==null ? String(obj) :class2type[toString.call(obj)] || "object";}$.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {class2type[ "[object " + name + "]" ] = name.toLowerCase()});alert(type(new Date()))})();
本来不愿贴这么长的代码,不过既然是节取,就节取的全一点好了(不要在意$对象)。
其实思路很简单,用Object原型的toString方法获取类型,再将常见的对象类型保存在class2type中,在type函数中对null和class2type中不存在的类型进行处理,即可对js中的类型进行判断。
2、数组unique结果
filter=[].filter||function(fn){var results=[];for(var i=0,len=this.length;i<len;i++){if(fn(this[i], i))results.push(this[i]);}return results;};uniq = function(array){ return filter.call(array, function(item, idx){ return array.indexOf(item) == idx }) }alert(uniq([2,3,2,4,null,'a',null,'d','a']));
unique其实并不复杂,这是zepto库中的一种写法,重要的是这种实现思路。
3、多维数组转一维数组(prototype中的写法)
Object.extend=function(destination, source){for(var property in source){destination[property] = source[property];}return destination;}Object.extend(Array.prototype, (function(){Array.isArray = Array.isArray ? Array.isArray : function(obj){ return obj instanceof Array };function each(iterator){for(var i=0, length=this.length; i<length; i++)iterator(this[i], i);}function inject(memo, iterator, context){this.each(function(item, index){memo=iterator.call(context, memo, item, index);});return memo;}function flatten(){return this.inject([], function(array, item){if(Array.isArray(item)){return array.concat(item.flatten());}array.push(item);return array;});}return {each: each,inject: inject,flatten: flatten}})());alert([1,453,54,4,[333,444,["bbb","ccc"]],3,4].flatten()[6]);
主方法flatten其实只有一个递归,重点在inject方法中——把返回值作为参数传给函数iterator。
暂时先写这么多吧,有时间再整理。。。
0 0
- js-小技巧(1)
- JS小技巧【1】
- js小技巧1
- js-小技巧(2)
- 初入node.js 小技巧1
- js中的小技巧(转)
- JS(javascript)的一些小技巧
- js常用小技巧(实用)
- js中的小技巧(一)
- 【前端】js小技巧(持续更新)
- js中的小技巧
- js经验总结,小技巧
- js小技巧
- js小技巧
- js 小技巧
- js小技巧
- js使用小技巧
- js实用小技巧
- Google protocol buffers 小结
- Android 本地图片 设置成宽高固定的背景
- delphi Bresenham算法生成坐标点,8个方向
- 解压版Tomcat配置为服务
- EA China - 企业架构(中国)
- js-小技巧(1)
- Tomcat设置虚拟目录
- javascript重载实现
- 【LeetCode】Subsets II 解题报告
- Nginx配置文件详细说明
- 张小磊分享:搜索引擎高级搜索指令
- UFT/QTP evaluation--Keyword-Driven GUI Test(1) 概述
- 马云:我不听经济学家的,不然灾难大了
- Java中过滤出字母、数字和中文的正则表达式