js中易混淆的方法及概念
1.substring()和substr(),以及跟substring功能相似的slice()
相同点:
当参数为空时,都是返回整个字符串;
当参数为一个正数时,都返回该数起始位置到结束。
不同点:
substring(start,stop); start和stop要求是非负整数,如果start==stop,返回“”;如果start>stop,调换位置,负数按照0来处理。 var str="Hello world!"; str.substring(1,4); //"ell" str.substring(4,1); //"ell" str.substring(-1,-4); //"" str.substring(1,-4); //"H" slice(start,stop); start和stop都可为负数,负数时从尾部开始计算,如果start>=stop,都返回“”。 var str="Hello world!"; str.slice(1,4); //"ell" str.slice(-4,-1); //"rld" str.slice(-1,-4); //"" substr(start,length); start可为负数,负数时从尾部开始计算。length<=0,即可理解为负数按0计算,返回“”。 var str="Hello world!"; str.substr(-5,3); //"orl" str.substr(3,-3); //""
2.json和jsonp
http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html
一个是描述信息的格式,一个是信息传递双方约定的方法。
<script type="text/javascript"> var localHandler = function(data){ alert('我是本地函数,可以被跨域的remote.js文件调用,远程js带来的数据是:' + data.result); }; </script> <script type="text/javascript" src="http://remoteserver.com/remote.js"></script>
远程remote.js文件:
localHandler({"result":"我是远程js带来的数据"});
3.slice()、splice()、split()
slice():片,String对象和Array对象
语法:slice(start,end),原来的对象不会改变。
var str="Hello happy world!" alert(str.slice(6,11)) //happy alert(str.slice(6)) //happy world! alert(str.slice()) //Hello happy world! var arr = ['aa','bb','cc']; arr.slice(1,2) //["bb"],arr不会变,还是返回['aa','bb','cc']
splice():剪接,Array对象,会改变原来的对象
语法:arrayObject.splice(index,howmany,element1,.....,elementX)
index(必需):开始,若括号里面只有一个值,则表示index,默认长度为数组长度。
howmany(必需):多少元素
element1:可选
elementX:可选
不加可选参数element var arr = ["George","John","Thomas","James","Adrew","Martin"]; var subarr = arr.splice(2,3); arr; // ["George", "John", "Martin"],原数组arr被剪切掉一部分 subarr; //["Thomas", "James", "Adrew"] 加了可选参数element,意思是向原数组添加新的项目 var arr = ["George","John","Thomas","James","Adrew","Martin"]; var subarr = arr.splice(2,3,"William"); arr; //["George", "John", "William", "Martin"]原数组多了一个参数 subarr; //["George", "John", "Martin"]
var arr = ["1","2","3","4","5"];
var subarr = arr.splice(2);
arr; //["1","2"]
subarr; //["3","4","5"]
split():分裂,String对象
语法:stringObject.split(separator,howmany)
separator:必需,字符串或正则表达式
howmany:可选,指定返回的数组的最大长度
var str="How are you doing today?"; str.split(" ",3); //["How", "are", "you"] "|a|b|c".split("|"); //["", "a", "b", "c"]
与Array对象的join()函数的作用相反
var arr = ["George","John","Thomas"];arr.join('@') //"George@John@Thomas" var arr = ["George","John","Thomas"];arr.join('') //"GeorgeJohnThomas"
4.encodeURI()和encodeURIComponent()
encodeURI(URIstring) 对URI进行完整编码,不会转义;/?:@&=+$,# encodeURIComponent(URIstring)会转义;/?:@&=+$,# //适合转义url decodeURI和decodeURIComponent反转义
5.数组方法shift()、pop()、push()、unshift(),都会直接修改原有数组。
shift():返回数组原来的第一个元素的值。
var arr = ["George","John","Thomas"]; arr.shift() //George arr //John,Thomas
pop():返回数组的最后一个元素。
var arr = ["George","John","Thomas"]; arr.pop() //Thomas arr //George,John
push():向数组的末尾添加一个或多个元素,并返回新的长度。
var arr = ["George","John","Thomas"]; arr.push("James") //4 arr //George,John,Thomas,James
unshift():向数组的开头添加一个或多个元素,并返回新的长度。
var arr = ["George","John","Thomas"]; arr.unshift("William") //4 arr //William,George,John,Thomas