盘点JavaScript里好用的原生API
2016-03-31 10:40
495 查看
转自:https://segmentfault.com/a/1190000002753931
解析
[/code]
格式化
转义
http://segmentfault.com/a/1190000002687651
解析字符串对象
我们都知道,JavaScript对象可以序列化为JSON,JSON也可以解析成对象,但是问题是如果出现了一个既不是JSON也不是对象的"东西",转成哪一方都不方便,那么eval就可以派上用场 varobj="{a:1,b:2}";//看起来像对象的字符串 eval("("+obj+")")//{a:1,b:2}
&
(按位与)
判断一个数是否为2的n次幂,可以将其与自身减一相与 varnumber=4 (number&number-1)===0//true
[/code]
^
(按位异或)
不用第三个变量,就可以交换两个变量的值 vara=4,b=3 a=a^b//7 b=a^b//4 a=a^b//3
格式化Date
想得到format后的时间?现在不用再get年月日时分秒了,三步搞定 vartemp=newDate(); varregex=/\//g; (temp.toLocaleDateString()+''+temp.toLocaleTimeString().slice(2)).replace(regex,'-'); //"2015-5-79:04:10" 想将format后的时间转换为时间对象?直接用Date的构造函数 newDate("2015-5-79:04:10"); //ThuMay07201509:04:10GMT+0800(CST) 经测试发现火狐没法对format后的时间字符串使用Date.parse(),故这个方法在火狐上不好使 想将一个标准的时间对象转换为unix时间戳?valueOf搞定之 (newDate).valueOf(); //1431004132641 许多朋友还提醒了这样可以快速得到时间戳 +newDate //1431004132641
一元加
一元加可以快速将字符串的数字转换为数学数字,即 varnumber="23" typeofnumber//string typeof+number//number 可以将时间对象转为时间戳 newDate//TueMay12201522:21:33GMT+0800(CST) +newDate//1431440459887
转义URI
需要将url当做参数在路由中传递,现在转义之 varurl=encodeURIComponent('http://segmentfault.com/questions/newest') //"http%3A%2F%2Fsegmentfault.com%2Fquestions%2Fnewest" 再反转义 decodeURIComponent(url) //"http://segmentfault.com/questions/newest"
Number
希望保留小数点后的几位小数,不用再做字符串截取了,toFixed拿走 number.toFixed()//"12346" number.toFixed(3)//"12345.679" number.toFixed(6)//"12345.678900" 参数范围为0~20,不写默认0
类型检测
typeof是使用最频繁的类型检测手段 typeof3//"number" typeof"333"//"string" typeoffalse//"boolean" 对于基本(简单)数据类型还是挺好的,但是一旦到了引用数据类型的时候,就不那么好使了 typeofnewDate()//"object" typeof[]//"object" typeof{}//"object" typeofnull//"object" 前三个还能忍,null居然也返回object,你是在逗我吗!!!(ps:其实这是JavaScript的bug人艰不拆꒰・◡・๑꒱) 这时,我们会使用instanceof toStringinstanceofFunction //true (newDate)instanceofDate //true []instanceofObject //true []instanceofArray //true 其实我们可以发现,[]和Object得到了true,虽然我们知道,[]也是对象,但是我们希望一个能更准确的判断类型的方法,现在它来了
使用Object.prototype.toString()来判断,为了让每一个对象都能通过检测,我们需要使用Function.prototype.call或者Function.prototype.apply的形式来调用 vartoString=Object.prototype.toString; toString.call(newDate)//"[objectDate]" toString.call(newArray)//"[objectArray]" toString.call(newObject)//"[objectObject]" toString.call(newNumber)//"[objectNumber]" toString.call(newString)//"[objectString]" toString.call(newBoolean)//"[objectBoolean]" 要注意的是:toString方法极有可能被重写,所以需要使用的时候, 可以直接使用Object.prototype.toString()方法
实现继承
看一个官方给的例子 //Shape-superclass functionShape(){ this.x=0; this.y=0; } Shape.prototype.move=function(x,y){ this.x+=x; this.y+=y; console.info("Shapemoved."); }; //Rectangle-subclass functionRectangle(){ Shape.call(this);//callsuperconstructor. } Rectangle.prototype=Object.create(Shape.prototype); varrect=newRectangle(); rectinstanceofRectangle//true. rectinstanceofShape//true. rect.move(1,1);//Outputs,"Shapemoved." 通过call来获取初始化的属性和方法,通过Object.create来获取原型对象上的属性和方法
迭代
ES5出了挺多的迭代函数,如map,filter,some,every,reduce等,这里有传送门,可以看到挺多的例子
Array
具体的api这里介绍的很详细。
全选复制放进笔记
这里就提几句: pop,push,reverse,shift,sort,splice,unshift会改变原数组 join,concat,indexOf,lastIndexOf,slice,toString不会改变原数组 map,filter,some,every,reduce,forEach这些迭代方法不会改变原数组 几个注意点: 1shift,pop会返回那个被删除的元素 2splice会返回被删除元素组成的数组,或者为空数组 3push会返回新数组长度 4some在有true的时候停止 5every在有false的时候停止 6上述的迭代方法可以在最后追加一个参数thisArg,它是执行callback时的this值。
相关文章推荐
- 30、JS如何获取当前系统时间?
- js跨域请求数据
- JS 数组去重
- JavaScript 开发的45个经典技巧
- socket.io+angular.js+express.js做个聊天应用(一)
- json_encode()和json_decode()的用法
- NSJSONSerialization-JSON数据与NSDictionary和NSArray之间的转化(转)
- ExtJs使用总结(非常详细)
- EL表达式截取字符串
- seajs常用API快速参考
- JSP 中的 Filter 过滤器
- seajs的模块标识
- 一张图看懂JavaScript中数组的迭代方法:forEach、map、filter、reduce、every、some
- JSON Bean 相互转换工具(效率是Gson的两倍以上)
- js调试工具Console命令详解
- jsp标签jsp:useBean用法(转载)
- Javascript setTimeout内存溢出问题
- JSP 参数传递的方法详解
- 字符串转为Date类型
- JavaScript笔记4--闭包