原生JS操作数组(Array)或对象(Object)以及(String)对象的使用方法

shift:删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefined

  1. var a = [1,2,3,4,5];
  2. var b = a.shift(); //a:[2,3,4,5] b:1

unshift:将参数添加到原数组开头,并返回数组的长度

  1. var a = [1,2,3,4,5];
  2. var b = a.unshift(-2,-1); //a:[-2,-1,1,2,3,4,5] b:7

注:在IE6.0下测试返回值总为undefined,FF2.0下测试返回值为7,所以这个方法的返回值不可靠,需要用返回值时可用splice代替本方法来使用。

pop:删除原数组最后一项,并返回删除元素的值;如果数组为空则返回undefined

  1. var a = [1,2,3,4,5];
  2. var b = a.pop(); //a:[1,2,3,4] b:5

push:将参数添加到原数组末尾,并返回数组的长度

  1. var a = [1,2,3,4,5];
  2. var b = a.push(6,7); //a:[1,2,3,4,5,6,7] b:7

concat:返回一个新数组,是将参数添加到原数组中构成的

  1. var a = [1,2,3,4,5];
  2. var b = a.concat(6,7); //a:[1,2,3,4,5] b:[1,2,3,4,5,6,7]

splice(start,deleteCount,val1,val2,…):从start位置开始删除deleteCount项,并从该位置起插入val1,val2,…

  1. var a = [1,2,3,4,5];
  2. var b = a.splice(2,2,7,8,9); //a:[1,2,7,8,9,5] b:[3,4]
  3. var b = a.splice(0,1); //同shift
  4. a.splice(0,0,-2,-1); var b = a.length; //同unshift
  5. var b = a.splice(a.length-1,1); //同pop
  6. a.splice(a.length,0,6,7); var b = a.length; //同push

reverse:将数组反序

  1. var a = [1,2,3,4,5];
  2. var b = a.reverse(); //a:[5,4,3,2,1] b:[5,4,3,2,1]

sort(orderfunction):按指定的参数对数组进行排序

  1. var a = [1,2,3,4,5];
  2. var b = a.sort(); //a:[1,2,3,4,5] b:[1,2,3,4,5]

slice(start,end):返回从原数组中指定开始下标到结束下标之间的项组成的新数组

  1. var a = [1,2,3,4,5];
  2. var b = a.slice(2,5); //a:[1,2,3,4,5] b:[3,4,5]

join(separator):将数组的元素组起一个字符串,以separator为分隔符,省略的话则用默认用逗号为分隔符

  1. var a = [1,2,3,4,5];
  2. var b = a.join("|"); //a:[1,2,3,4,5] b:"1|2|3|4|5"

数组是JavaScript提供的一个内部对象,它是一个标准的集合,我们可以添加(push)、删除(shift)里面元素,我们还可以通过for循环遍历里面的元素,那么除了数组我们在JavaScript里还可以有别的集合吗?

由于JavaScript的语言特性,我们可以向通用对象动态添加和删除属性。所以Object也可以看成是JS的一种特殊的集合。下面比较一下Array和Object的特性:

Array:

新建:var ary = new Array(); 或 var ary = [];

增加:ary.push(value);

删除:delete ary[n];

遍历:for ( var i=0 ; i < ary.length ; ++i ) ary[i];

Object:

新建:var obj = new Object(); 或 var obj = {};

增加:obj[key] = value; (key为string)

删除:delete obj[key];

遍历:for ( var key in obj ) obj[key];

从上面的比较可以看出Object完全可以作为一个集合来使用,在使用Popup窗口创建无限级Web页菜单(3)中我介绍过Eric实现的那个__MenuCache__,它也就是一个模拟的集合对象。

如果我们要在Array中检索出一个指定的值,我们需要遍历整个数组:

代码:

  1. var keyword = ;
  2. for ( var i=0 ; i < ary.length ; ++i ){
  3. if ( ary[i] == keyword ) {
  4.    // todo
  5. }
  6. }

而我们在Object中检索一个指定的key的条目,只需要是要使用:
代码:

  1. var key = ";
  2. var value = obj[key];
  3. // todo

Object的这个特性可以用来高效的检索Unique的字符串集合,遍历Array的时间复杂度是O(n),而遍历Object的时间复杂度是O(1)。虽然对于10000次集合的for检索代价也就几十ms,可是如果是1000 x 1000次检索或更多,使用Object的优势一下就体现出来了。在此之前我做了一个mapping,把100个Unique的字符mapping到1000个字符串数组上,耗时25-30s!后来把for遍历改成了Object模拟的集合的成员引用,同样的数据量mapping,耗时仅1.7-2s!!!

对于集合的遍历效率(从高到低):var value = obj[key]; > for ( ; ; ) > for ( in )。效率最差的就是for( in)了,如果集合过大,尽量不要使用for ( in )遍历

文章转自: http://www.cnblogs.com/webhotel/archive/2010/12/21/1912732.html

最后补充介绍一下 String 对象的使用方法:

charCodeAt:方法返回一个整数,代表指定位置字符的Unicode编码。

strObj.charCodeAt(index)

index将被处理字符的从零开始计数的编号。有效值为0到字符串长度减1的数字。

如果指定位置没有字符,将返回NaN。

例如:

  1. var str = "ABC";
  2. str.charCodeAt(0); //65

fromCharCode:方法从一些Unicode字符串中返回一个字符串。

  1. String.fromCharCode([code1[,code2...]])
  2. code1code2...是要转换为字符串的Unicode字符串序列。如果没有参数,结果为空字符串。
  3. String.fromCharCode(65,66,112); //ABp

charAt:方法返回指定索引位置处的字符。如果超出有效范围的索引值返回空字符串。

strObj.charAt(index)
说明:
index想得到的字符的基于零的索引。有效值是0与字符串长度减一之间的值。
例如:

  1. var str = "ABC";
  2. str.charAt(1);
  3. 结果:B

slice:方法返回字符串的片段。

strObj.slice(start[,end])
说明:
start下标从0开始的strObj指定部分其实索引。如果start为负,将它作为length+start处理,此处length为字符串的长度。
end小标从0开始的strObj指定部分结束索引。如果end为负,将它作为length+end处理,此处length为字符串的长度。
例如:

  1. 012345
  2. var str = "ABCDEF";
  3. str.slice(2,4);
  4. 结果:CD

substring:方法返回位于String对象中指定位置的子字符串。

strObj.substring(start,end)
说明:
start指明子字符串的起始位置,该索引从0开始起算。
end指明子字符串的结束位置,该索引从0开始起算。
substring方法使用startend两者中的较小值作为子字符串的起始点。如果startendNaN或者为负数,那么将其替换为0。
例如:

  1. 012345
  2. var str = "ABCDEF";
  3. str.substring(2,4); // 或 str.substring(4,2);
  4. 结果:CD

substr:方法返回一个从指定位置开始的指定长度的子字符串。

strObj.substr(start[,length])
说明:
start所需的子字符串的起始位置。字符串中的第一个字符的索引为0。
length在返回的子字符串中应包括的字符个数。
例如:

  1. 012345
  2. var str = "ABCDEF";
  3. str.substr(2,4);
  4. 结果:CDEF

indexOf:方法放回String对象内第一次出现子字符串位置。如果没有找到子字符串,则返回-1。

strObj.indexOf(substr[,startIndex])
说明:
substr要在String对象中查找的子字符串。
startIndex该整数值指出在String对象内开始查找的索引。如果省略,则从字符串的开始处查找。
例如:

  1. 01234567
  2. var str = "ABCDECDF";
  3. str.indexOf("CD"1); // 由1位置从左向右查找 123...
  4. 结果:2

lastIndexOf:方法返回String对象中字符串最后出现的位置。如果没有匹配到子字符串,则返回-1。

strObj.lastIndexOf(substr[,startindex])
说明:
substr要在String对象内查找的子字符串。
startindex该整数值指出在String对象内进行查找的开始索引位置。如果省略,则查找从字符串的末尾开始。
例如:

  1. 01234567
  2. var str = "ABCDECDF";
  3. str.lastIndexOf("CD",6); // 由6位置从右向左查找 ...456
  4. 结果:5

search:方法返回与正则表达式查找内容匹配的第一个字符串的位置。

strObj.search(reExp)
说明:
reExp包含正则表达式模式和可用标志的正则表达式对象。
例如:

  1. var str = "ABCDECDF";
  2. str.search("CD"); // 或 str.search(/CD/i);
  3. 结果:2

concat:方法返回字符串值,该值包含了两个或多个提供的字符串的连接。

str.concat([string1[,string2...]])
说明:
string1string2要和所有其他指定的字符串进行连接的String对象或文字。
例如:

  1. var str = "ABCDEF";
  2. str.concat("ABCDEF","ABC");
  3. 结果:ABCDEFABCDEFABC

split:将一个字符串分割为子字符串,然后将结果作为字符串数组返回。

strObj.split([separator[,limit]])
说明:
separator字符串或 正则表达式 对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整个字符串的单一元素数组。
limit该值用来限制返回数组中的元素个数。
例如:

  1. var str = "AA BB CC DD EE FF";
  2. alert(str.split(" "3));
  3. 结果:
  4. AA,BB,CC

toLowerCase:方法返回一个字符串,该字符串中的字母被转换成小写。

  1. var str = "ABCabc";
  2. str.toLowerCase();
  3. 结果:abcabc

toUpperCase:方法返回一个字符串,该字符串中的所有字母都被转换为大写字母。

例如:

  1. var str = "ABCabc";
  2. str.toUpperCase();
  3. 结果:ABCABC

评论: