整理了一些Javascript语言精粹
的方法一章的整理出的ES5的内置方法;javascript
以后还会整理'ES6标准入门'的新添加的ES6方法;java
整理这些做用一方面是更好的理解记忆,另外一方面是对于类数组arguments,可使用原型链的调用(Array.prototype.call(...))便可;python
>var a = [1,2,3]; > >b = a.concat([4,5,6]);
输出的b为a+b的结果[1,2,3,4,5,6];所以array.concat的做用是链接数组,固然item能够是数字也会加入到里面;git
做用是把一个数组变成一个字符串,中间使用separator链接;正则表达式
>var a = [1,2,3]; > >b = a.join(""); //b = "123" > >c = a.join(","); //c = "1,2,3" >
数组的标准操做,大概的思路是返回和添加一个元素到最后一个;数组
而后push返回的是加入以后的数组长度;pop返回的是数组的被踢出的值;app
共同的特性就是都会改变数组原来的数值;函数
数组原地逆转,而后返回这个逆转的数组;this
移除数组头元素,而且返回,速度并无pop快;url
把数组加到头元素,返回新的数组的长度;
相似于python的切片;返回的是浅复制的数组
从start的点开始删除deleteCount个数的元素,而后再这个地点加入item元素;返回删除的元素
>var a= [1,2,3]; > >var b = a.splice(1,2,[1,2,3]) // a = [1,[1,2,3]]; b = [2,3]
若是不加入comparafn的状况下,sort函数会按照字符串的形式来排序;
> a = [1,22,33,12,112] [ 1, 22, 33, 12, 112 ] > a.sort() [ 1, 112, 12, 22, 33 ]
所以咱们在使用sort函数的时候,咱们应该使用comparefn;下面说下这个函数的做用机制:
比较函数comparefn接受两个参数:a,b;
而后comparefn会返回一个数值,若是返回的值大于0,那么就调换顺序,若是小于0,那么就不会调换顺序;
aList = [1,2,3]; ab = function(a,b){return a-b}; ba = function(a,b){return b-a}; aList.sort(ab); //[1,2,3] aList.sort(ba); //[3,2,1] 由于依此遍历b-a,而后大于0就调换位置;
而后语言精粹里面加入了更加复杂的一些比较函数:
var m = ['aa','bb','a',4,8,15,16,23,42]; m.sort(function(a,b){ if(a===b){ return 0; } if(typeof a ===typeof b){ return a < b? -1:1; } //'string' > 'number',会让number在前面 return typeof a < typeof b? -1:1; }); // m为 4,8,15,16,23,42,a,aa,bb
而后继续拓展一个更加高级的比较方法,用来比较对象里面的属性的排序:
var s = [ {first:"Joe",last:"Besser"}, {first:"Moe",last:"Howard"}, {first:"Joe",last:"Derita"}, {first:"Curly",last:"Howard"}, {first:12,last:"Howard"} ]; //这里的direction为 1或者-1.其中-1为正序(升高排列); var by = function(name,direction){ return function(o,p){ var a,b; //下面是为了首先判断是object,并且不是null; if(typeof o === "object" && typeof p ==="object" && o&& p){ a =o[name]; b = p[name]; if( a=== b){ return 0; } if(typeof a === typeof b){ return a<b ? direction:-direction; //意思是若是是统一的类型,那么就正序排列 } return typeof a < typeof b? direction:-direction; } } }; s.sort(by("first",-1));
若是还须要比较第二个last的排序,那么能够继续拓展,改变上面若是a===b的时候排序方法:
var by = function(name,minor,direction){ .....//不变的部分 if(a===b){ return typeof minor ==="function"? minor(o,p):0; } .....//不变 } //至关于递归了一次调用方法是 s.sort(by("first",by("last"),-1));
固然我也在这里碰到了一个问题
//若是只是调用一次排序函数,那么这样是没问题的 s.sort(by("first",-1)); //若是两个同时调用: s.sort(by("first",1)); s.sort(by("first",-1)); //返回的对象的排序方式是如出一辙的; //因此这样的话,也就是第二个方法其实并无奏效; //查了下彷佛是回调机制问题,之后再研究;
其实call和apply很像,call只是apply的语法糖写法;
apply的做用仍是显式的绑定this到函数上面;
详细的可见你不知道的Javascript上册
最有用的地方就是遍历对象的属性了
转化为字符串,用指数形式表示,而且选择保留小数点后几位的问题
> Math.PI.toExponential(2) '3.14e+0' > Math.PI.toExponential(3) '3.142e+0' > Math.PI.toExponential(5) '3.14159e+0'
转化为字符串,而且选择保留小数点后几位的问题
> Math.PI.toFixed(2) '3.14' > Math.PI.toFixed(3) '3.142'
数字转化为字符串,radix是控制多少进制
> Math.PI.toString() '3.141592653589793' > Math.PI.toString(2) '11.001001000011111101101010100010001000010110100011' > Math.PI.toString(8) '3.1103755242102643'
寻找string里面的字符串里面的字符串,并且从position的位置开始;没找到返回-1
> var text = "Mississippi" > text.indexOf("ss") 2 > text.indexOf("ss",2) 2 > text.indexOf("ss",3) 5 > text.indexOf("ss",6) -1
和正则表达式匹配..之后再更新
replace方法对string进行查找和替换操做,而且返回一个新的字符串;
searchValue能够是正则表达式,若是searchvalue是普通的字符串,那么只会替换第一个
> text 'Mississippi' > text.replace("ss","SS") 'MiSSissippi' > text 'Mississippi' > text.replace("ss","SS").replace("ss","SS") 'MiSSiSSippi'
下面是和正则表达式的匹配:
string的search方法和indexOf方法很类似,可是只能接受正则表达式对象;
复制string的一个部分来构造新的字符串,这个方法和array.slice()很相似;
> text 'Mississippi' > text.slice(1) 'ississippi' > text.slice(1,3) //end - start 的个数差是须要书要输出的个数 'is'
把字符串用separator分解成为一个数组,而后这个separator能够是正则表达式对象,
limits表示了这里须要多少个;
> a = "123456789" '123456789' > a.split("") [ '1', '2', '3', '4', '5', '6', '7', '8', '9' ] > a.split("",5) [ '1', '2', '3', '4', '5' ] > f = "a|b|c|" 'a|b|c|' > f.split(/\|/) [ 'a', 'b', 'c', '' ]
两个方法分别返回一个新的字符串,string被转化成为大写和小写的格式