﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-这一片海，源于那一瓢水-文章分类-Stack</title><link>http://www.blogjava.net/hefang/category/45426.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 25 Jun 2010 09:57:43 GMT</lastBuildDate><pubDate>Fri, 25 Jun 2010 09:57:43 GMT</pubDate><ttl>60</ttl><item><title>Schema的优化和索引 - 高性能的索引策略 - 索引和锁(转)</title><link>http://www.blogjava.net/hefang/articles/324488.html</link><dc:creator>何方</dc:creator><author>何方</author><pubDate>Fri, 25 Jun 2010 09:54:00 GMT</pubDate><guid>http://www.blogjava.net/hefang/articles/324488.html</guid><wfw:comment>http://www.blogjava.net/hefang/comments/324488.html</wfw:comment><comments>http://www.blogjava.net/hefang/articles/324488.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hefang/comments/commentRss/324488.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hefang/services/trackbacks/324488.html</trackback:ping><description><![CDATA[<p>InnoDB中，索引所扮演的角色是非常重要的。因为它们可以能让语句锁定更少的行。这是个要考虑的事情，因为在MySQL5.0 InnoDB中一个事物提前之前，是不会释放锁的。</p>
<p>如果查询语句不会检索它们不需要的行。它们将锁定更少的行。并且对于性能有提高，原因有二：首先，即使InnoDB行锁是非常有效率的并且使用更少的内存，但是行锁也会消耗一定的资源。其次，锁定很多的行就提高了锁的竞争并且降低了并发。</p>
<p>仅当InnoDB访问行的时候，才对它们加锁，并且一个索引可以降低InnoDB所要访问的行，因此也会降低锁。然而，这种情况只适用于在存储引擎级别中，InnoDB过滤了不期望的行。如果索引不允许InnoDB那么做，MySQL<a href="http://student.csdn.net/link.php?url=http://www.bianceng.cn%2FServers%2F" target="_blank">服务器</a>就会在InnoDB取到这些值并且返回服务层之后，应用WHERE条件了。这种情况下，避免行的锁定就太晚了：InnoDB已经锁定了它们，并且服务器是不可能解锁的。</p>
<p>为了更好的理解我们看个例子，我们还是用以前的数据库Sakila</p>
<p><code>mysql&gt; SET AUTOCOMMIT=0;<br />
mysql&gt; BEGIN;<br />
mysql&gt; SELECT actor_id FROM sakila.actor WHERE actor_id &lt; 5<br />
　　 　-&gt; AND actor_id &lt;&gt; 1 FOR UPDATE;<br />
+----------+<br />
| actor_id |<br />
+----------+<br />
| 　 　 　 　2 |<br />
| 　 　 　 　3 |<br />
| 　 　 　 　4 |<br />
+----------+</code></p>
<p>这个查询返回了2到4行，但是实际上它已经获得了1到4行的独占锁。InnoDB锁定了第一行，因为这个语句是个索引范围读取：</p>
<p><code>mysql&gt; EXPLAIN SELECT actor_id FROM sakila.actor<br />
　　 　-&gt; WHERE actor_id &lt; 5 AND actor_id &lt;&gt; 1 FOR UPDATE;<br />
+----+-------------+-------+-------+---------+--------------------------+<br />
| id | select_type | table | type 　| key 　 　 | Extra 　 　 　 　 　 　 　 　 　 　|<br />
+----+-------------+-------+-------+---------+--------------------------+<br />
| 　1 | SIMPLE 　 　 　| actor | range | PRIMARY | Using where; Using index |<br />
+----+-------------+-------+-------+---------+--------------------------+</code></p>
<p>换句话说，这个低级别的存储引擎操作是&#8220;从索引开始并且获取所有的行直到actor_id&lt;5为false&#8221;。服务器是不会告诉InnoDB,WHERE　actor_id　&lt;&gt;1的条件。来看下EXTRA列的Using where。这就说明了在存储引擎返回行之后，MySQL服务器用WHERE进行了过滤。</p>
<p>下面的语句证明了第一行已经被锁了，即使它不会出现在第一个查询结果之中。丢掉第一个连接，开始第二个连接执行下列语句。</p>
<p><code>mysql&gt; SET AUTOCOMMIT=0;<br />
mysql&gt; BEGIN;<br />
mysql&gt; SELECT actor_id FROM sakila.actor WHERE actor_id = 1 FOR UPDATE;</code></p>
<p>这个查询会被挂起。等待第一个事物是否第一行的锁。这个行为是为了保证基于语句级的复制是正确的。（在复制的一节会说道。）</p>
<p>就像这个例子所显示的，即使使用了索引，InnoDB还回会锁定它并不是真正需要的行。当不使用索引去查找和锁定行，这样的问题会更严重：如果这个语句没有索引，不管需不需要，MySQL都会扫描整张表并且锁定每个行。</p>
<p>下面谈一下InnoDB，索引和锁的一些鲜为人知的细节：InnoDB会把共享锁放置在次要索引上，但是独占锁需要访问主键。这就降低了使用覆盖索引的可能性并且会导致SELECT FOR UPDATE 慢于LOCK IN SHARE MODE 或者没有锁的查询。</p>
<img src ="http://www.blogjava.net/hefang/aggbug/324488.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hefang/" target="_blank">何方</a> 2010-06-25 17:54 <a href="http://www.blogjava.net/hefang/articles/324488.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>办公软件的一些操作,copy过来的，啥也没改</title><link>http://www.blogjava.net/hefang/articles/324487.html</link><dc:creator>何方</dc:creator><author>何方</author><pubDate>Fri, 25 Jun 2010 09:53:00 GMT</pubDate><guid>http://www.blogjava.net/hefang/articles/324487.html</guid><wfw:comment>http://www.blogjava.net/hefang/comments/324487.html</wfw:comment><comments>http://www.blogjava.net/hefang/articles/324487.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hefang/comments/commentRss/324487.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hefang/services/trackbacks/324487.html</trackback:ping><description><![CDATA[<div align="left"><strong><span style="font-size: 12pt">Word</span></strong><strong><span style="font-size: 12pt">绝招:<br />
</span></strong><span style="font-size: 12pt">一、 输入三个&#8220;=&#8221;，回车，得到一条双直线；<br />
二、 输入三个&#8220;~&#8221;，回车，得到一条波浪线；<br />
三、 输入三个&#8220;*&#8221;或 &#8220;-&#8221;或 &#8220;#&#8221;，回车，惊喜多多；<br />
在单元格内输入=now（）&nbsp;&nbsp; 显示日期</span></div>
<div align="left"><span style="font-size: 12pt">在单元格内输入=CHOOSE(WEEKDAY(I3,2),"星期一","星期二","星期三","星期四","星期五","星期六","星期日")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示星期几</span></div>
<div align="left"><span style="font-size: 10pt">Excel</span><span style="font-size: 10pt">常用函数大全</span></div>
<p>
<table cellpadding="0" border="0">
    <tbody>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; border-left-color: #e5e5e5; border-bottom-color: #e5e5e5; padding-bottom: 0.75pt; border-top-color: #e5e5e5; padding-top: 0.75pt; background-color: transparent; border-right-color: #e5e5e5">
            <div align="left"><span style="font-size: 12pt">　1、ABS函数 <br />
            　　函数名称：ABS <br />
            　　主要功能：求出相应数字的绝对值。 <br />
            　　使用格式：ABS(number) <br />
            　　参数说明：number代表需要求绝对值的数值或引用的单元格。 <br />
            　　应用举例：如果在B2单元格中输入公式：=ABS(A2)，则在A2单元格中无论输入正数（如100）还是负数（如-100），B2中均显示出正数（如100）。 <br />
            　　特别提醒：如果number参数不是数值，而是一些字符（如A等），则B2中返回错误值&#8220;#VALUE！&#8221;。</span></div>
            <div align="left"><span style="font-size: 12pt">　　2、AND函数 <br />
            　　函数名称：AND <br />
            　　主要功能：返回逻辑值：如果所有参数值均为逻辑&#8220;真（TRUE）&#8221;，则返回逻辑&#8220;真（TRUE）&#8221;，反之返回逻辑&#8220;假（FALSE）&#8221;。 <br />
            　　使用格式：AND(logical1,logical2, ...) <br />
            　　参数说明：Logical1,Logical2,Logical3&#8230;&#8230;：表示待测试的条件值或表达式，最多这30个。 <br />
            　　应用举例：在C5单元格输入公式：=AND(A5&gt;=60,B5&gt;=60)，确认。如果C5中返回TRUE，说明A5和B5中的数值均大于等于60，如果返回FALSE，说明A5和B5中的数值至少有一个小于60。 <br />
            　　特别提醒：如果指定的逻辑条件参数中包含非逻辑值时，则函数返回错误值&#8220;#VALUE!&#8221;或&#8220;#NAME&#8221;。</span></div>
            <div align="left"><span style="font-size: 12pt">　　3、AVERAGE函数 <br />
            　　函数名称：AVERAGE <br />
            　　主要功能：求出所有参数的算术平均值。 <br />
            　　使用格式：AVERAGE(number1,number2,&#8230;&#8230;) <br />
            　　参数说明：number1,number2,&#8230;&#8230;：需要求平均值的数值或引用单元格（区域），参数不超过30个。 <br />
            　　应用举例：在B8单元格中输入公式：=AVERAGE(B7:D7,F7:H7,7,8)，确认后，即可求出B7至D7区域、F7至H7区域中的数值和7、8的平均值。 <br />
            　　特别提醒：如果引用区域中包含&#8220;0&#8221;值单元格，则计算在内；如果引用区域中包含空白或字符单元格，则不计算在内。</span></div>
            <div align="left"><span style="font-size: 12pt">　　4、COLUMN 函数 <br />
            　　函数名称：COLUMN <br />
            　　主要功能：显示所引用单元格的列标号值。 <br />
            　　使用格式：COLUMN(reference) <br />
            　　参数说明：reference为引用的单元格。 <br />
            　　应用举例：在C11单元格中输入公式：=COLUMN(B11)，确认后显示为2（即B列）。 <br />
            　　特别提醒：如果在B11单元格中输入公式：=COLUMN()，也显示出2；与之相对应的还有一个返回行标号值的函数——ROW(reference)。</span></div>
            <div align="left"><span style="font-size: 12pt">　　5、CONCATENATE函数 <br />
            　　函数名称：CONCATENATE <br />
            　　主要功能：将多个字符文本或单元格中的数据连接在一起，显示在一个单元格中。 <br />
            　　使用格式：CONCATENATE(Text1，Text&#8230;&#8230;) <br />
            　　参数说明：Text1、Text2&#8230;&#8230;为需要连接的字符文本或引用的单元格。 <br />
            　　应用举例：在C14单元格中输入公式：=CONCATENATE(A14,"@",B14,".com")，确认后，即可将A14单元格中字符、@、B14单元格中的字符和.com连接成一个整体，显示在C14单元格中。 <br />
            　　特别提醒：如果参数不是引用的单元格，且为文本格式的，请给参数加上英文状态下的双引号，如果将上述公式改为：=A14&amp;"@"&amp;B14&amp;".com"，也能达到相同的目的。</span></div>
            <div align="left"><span style="font-size: 12pt">　　6、COUNTIF函数 <br />
            　　函数名称：COUNTIF <br />
            　　主要功能：统计某个单元格区域中符合指定条件的单元格数目。 <br />
            　　使用格式：COUNTIF(Range,Criteria) <br />
            　　参数说明：Range代表要统计的单元格区域；Criteria表示指定的条件表达式。　　 <br />
            　　应用举例：在C17单元格中输入公式：=COUNTIF(B1:B13,"&gt;=80")，确认后，即可统计出B1至B13单元格区域中，数值大于等于80的单元格数目。 <br />
            　　特别提醒：允许引用的单元格区域中有空白单元格出现。</span></div>
            <div align="left"><span style="font-size: 12pt">　　7、DATE函数 <br />
            　　函数名称：DATE <br />
            　　主要功能：给出指定数值的日期。 <br />
            　　使用格式：DATE(year,month,day) <br />
            　　参数说明：year为指定的年份数值（小于9999）；month为指定的月份数值（可以大于12）；day为指定的天数。 <br />
            　　应用举例：在C20单元格中输入公式：=DATE(2003,13,35)，确认后，显示出2004-2-4。 <br />
            　　特别提醒：由于上述公式中，月份为13，多了一个月，顺延至2004年1月；天数为35，比2004年1月的实际天数又多了4天，故又顺延至2004年2月4日。</span></div>
            <div align="left"><span style="font-size: 12pt">　　8、函数名称：DATEDIF<br />
            　　主要功能：计算返回两个日期参数的差值。<br />
            　　使用格式：=DATEDIF(date1,date2,"y")、=DATEDIF(date1,date2,"m")、=DATEDIF(date1,date2,"d")<br />
            　　参数说明：date1代表前面一个日期，date2代表后面一个日期；y（m、d）要求返回两个日期相差的年（月、天）数。<br />
            　　应用举例：在C23单元格中输入公式：=DATEDIF(A23,TODAY(),"y")，确认后返回系统当前日期[用TODAY()表示）与A23单元格中日期的差值，并返回相差的年数。<br />
            　　特别提醒：这是Excel中的一个隐藏函数，在函数向导中是找不到的，可以直接输入使用，对于计算年龄、工龄等非常有效。</span></div>
            <div align="left"><span style="font-size: 12pt">　　9、DAY函数<br />
            　　函数名称：DAY<br />
            　　主要功能：求出指定日期或引用单元格中的日期的天数。<br />
            　　使用格式：DAY(serial_number)<br />
            　　参数说明：serial_number代表指定的日期或引用的单元格。<br />
            　　应用举例：输入公式：=DAY("2003-12-18")，确认后，显示出18。<br />
            　　特别提醒：如果是给定的日期，请包含在英文双引号中。</span></div>
            <div align="left"><span style="font-size: 12pt">　　10、DCOUNT函数<br />
            　　函数名称：DCOUNT<br />
            　　主要功能：返回数据库或列表的列中满足指定条件并且包含数字的单元格数目。<br />
            　　使用格式：DCOUNT(database,field,criteria)<br />
            　　参数说明：Database表示需要统计的单元格区域；Field表示函数所使用的数据列（在第一行必须要有标志项）；Criteria包含条件的单元格区域。<br />
            　　应用举例：如图1所示，在F4单元格中输入公式：=DCOUNT(A1:D11,"语文",F1:G2)，确认后即可求出&#8220;语文&#8221;列中，成绩大于等于70，而小于80的数值单元格数目（相当于分数段人数）。</span></div>
            <div align="left">&nbsp;</div>
            <div align="left"><span style="font-size: 12pt">特别提醒：如果将上述公式修改为：=DCOUNT(A1:D11,,F1:G2)，也可以达到相同目的。</span></div>
            <div align="left"><span style="font-size: 12pt">　　11、FREQUENCY函数<br />
            　　函数名称：FREQUENCY<br />
            　　主要功能：以一列垂直数组返回某个区域中数据的频率分布。<br />
            　　使用格式：FREQUENCY(data_array,bins_array)<br />
            　　参数说明：Data_array表示用来计算频率的一组数据或单元格区域；Bins_array表示为前面数组进行分隔一列数值。　　<br />
            　　应用举例：如图2所示，同时选中B32至B36单元格区域，输入公式：=FREQUENCY(B2:B31,D2:D36)，输入完成后按下&#8220;Ctrl+Shift+Enter&#8221;组合键进行确认，即可求出B2至B31区域中，按D2至D36区域进行分隔的各段数值的出现频率数目（相当于统计各分数段人数）。</span></div>
            <div align="left"><span style="font-size: 12pt">&nbsp; <br />
            </span><span style="font-size: 12pt">　　特别提醒：上述输入的是一个数组公式，输入完成后，需要通过按&#8220;Ctrl+Shift+Enter&#8221;组合键进行确认，确认后公式两端出现一对大括号（{}），此大括号不能直接输入。</span></div>
            <div align="left"><span style="font-size: 12pt">　　12、IF函数<br />
            　　函数名称：IF<br />
            　　主要功能：根据对指定条件的逻辑判断的真假结果，返回相对应的内容。<br />
            　　使用格式：=IF(Logical,Value_if_true,Value_if_false)<br />
            　　参数说明：Logical代表逻辑判断表达式；Value_if_true表示当判断条件为逻辑&#8220;真（TRUE）&#8221;时的显示内容，如果忽略返回&#8220;TRUE&#8221;；Value_if_false表示当判断条件为逻辑&#8220;假（FALSE）&#8221;时的显示内容，如果忽略返回&#8220;FALSE&#8221;。<br />
            　　应用举例：在C29单元格中输入公式：=IF(C26&gt;=18,"符合要求","不符合要求")，确信以后，如果C26单元格中的数值大于或等于18，则C29单元格显示&#8220;符合要求&#8221;字样，反之显示&#8220;不符合要求&#8221;字样。<br />
            　　特别提醒：本文中类似&#8220;在C29单元格中输入公式&#8221;中指定的单元格，读者在使用时，并不需要受其约束，此处只是配合本文所附的实例需要而给出的相应单元格，具体请大家参考所附的实例文件。</span></div>
            <div align="left"><span style="font-size: 12pt">　　13、INDEX函数<br />
            　　函数名称：INDEX<br />
            　　主要功能：返回列表或数组中的元素值，此元素由行序号和列序号的索引值进行确定。<br />
            　　使用格式：INDEX(array,row_num,column_num)<br />
            　　参数说明：Array代表单元格区域或数组常量；Row_num表示指定的行序号（如果省略row_num，则必须有 column_num）；Column_num表示指定的列序号（如果省略column_num，则必须有 row_num）。<br />
            　　应用举例：如图3所示，在F8单元格中输入公式：=INDEX(A1:D11,4,3)，确认后则显示出A1至D11单元格区域中，第4行和第3列交叉处的单元格（即C4）中的内容。</span></div>
            <div align="left"><span style="font-size: 12pt"><br />
            </span><span style="font-size: 12pt">　　特别提醒：此处的行序号参数（row_num）和列序号参数（column_num）是相对于所引用的单元格区域而言的，不是Excel工作表中的行或列序号。</span></div>
            <div align="left"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp; 14</span><span style="font-size: 12pt">、INT函数<br />
            　　函数名称：INT<br />
            　　主要功能：将数值向下取整为最接近的整数。<br />
            　　使用格式：INT(number)<br />
            　　参数说明：number表示需要取整的数值或包含数值的引用单元格。　　<br />
            　　应用举例：输入公式：=INT(18.89)，确认后显示出18。<br />
            　　特别提醒：在取整时，不进行四舍五入；如果输入的公式为=INT(-18.89)，则返回结果为-19。<br />
            &nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; 15、ISERROR函数<br />
            　　函数名称：ISERROR<br />
            　　主要功能：用于测试函数式返回的数值是否有错。如果有错，该函数返回TRUE，反之返回FALSE。<br />
            　　使用格式：ISERROR(value)<br />
            　　参数说明：Value表示需要测试的值或表达式。<br />
            　　应用举例：输入公式：=ISERROR(A35/B35)，确认以后，如果B35单元格为空或&#8220;0&#8221;，则A35/B35出现错误，此时前述函数返回TRUE结果，反之返回FALSE。<br />
            　　特别提醒：此函数通常与IF函数配套使用，如果将上述公式修改为：=IF(ISERROR(A35/B35),"",A35/B35)，如果B35为空或&#8220;0&#8221;，则相应的单元格显示为空，反之显示A35/B35</span></div>
            <div align="left"><span style="font-size: 12pt">的结果。</span></div>
            <div align="left"><span style="font-size: 12pt">　　16、LEFT函数<br />
            　　函数名称：LEFT<br />
            　　主要功能：从一个文本字符串的第一个字符开始，截取指定数目的字符。<br />
            　　使用格式：LEFT(text,num_chars)<br />
            　　参数说明：text代表要截字符的字符串；num_chars代表给定的截取数目。　　<br />
            　　应用举例：假定A38单元格中保存了&#8220;我喜欢天极网&#8221;的字符串，我们在C38单元格中输入公式：=LEFT(A38,3)，确认后即显示出&#8220;我喜欢&#8221;的字符。<br />
            　　特别提醒：此函数名的英文意思为&#8220;左&#8221;，即从左边截取，Excel很多函数都取其英文的意思。</span></div>
            <div align="left"><span style="font-size: 12pt">　　17、LEN函数</span></div>
            <div align="left"><span style="font-size: 12pt">　　函数名称：LEN<br />
            　　主要功能：统计文本字符串中字符数目。<br />
            　　使用格式：LEN(text)<br />
            　　参数说明：text表示要统计的文本字符串。　　<br />
            　　应用举例：假定A41单元格中保存了&#8220;我今年28岁&#8221;的字符串，我们在C40单元格中输入公式：=LEN(A40)，确认后即显示出统计结果&#8220;6&#8221;。<br />
            　　特别提醒：LEN要统计时，无论中全角字符，还是半角字符，每个字符均计为&#8220;1&#8221;；与之相对应的一个函数——LENB，在统计时半角字符计为&#8220;1&#8221;，全角字符计为&#8220;2&#8221;。</span></div>
            <div align="left"><span style="font-size: 12pt">　　18、MATCH函数<br />
            　　函数名称：MATCH<br />
            　　主要功能：返回在指定方式下与指定数值匹配的数组中元素的相应位置。<br />
            　　使用格式：MATCH(lookup_value,lookup_array,match_type)<br />
            　　参数说明：Lookup_value代表需要在数据表中查找的数值；<br />
            　　Lookup_array表示可能包含所要查找的数值的连续单元格区域；<br />
            　　Match_type表示查找方式的值（-1、0或1）。<br />
            　　如果match_type为-1，查找大于或等于 lookup_value的最小数值，Lookup_array 必须按降序排列；<br />
            　　如果match_type为1，查找小于或等于 lookup_value 的最大数值，Lookup_array 必须按升序排列；<br />
            　　如果match_type为0，查找等于lookup_value 的第一个数值，Lookup_array 可以按任何顺序排列；如果省略match_type，则默认为1。<br />
            　　应用举例：如图4所示，在F2单元格中输入公式：=MATCH(E2,B1:B11,0)，确认后则返回查找的结果&#8220;9&#8221;。</span></div>
            <div align="left"><span style="font-size: 12pt"><br />
            </span><span style="font-size: 12pt">特别提醒：Lookup_array只能为一列或一行。</span></div>
            <div align="left"><span style="font-size: 12pt">　　19、MAX函数<br />
            　　函数名称：MAX<br />
            　　主要功能：求出一组数中的最大值。<br />
            　　使用格式：MAX(number1,number2&#8230;&#8230;)<br />
            　　参数说明：number1,number2&#8230;&#8230;代表需要求最大值的数值或引用单元格（区域），参数不超过30个。<br />
            　　应用举例：输入公式：=MAX(E44:J44,7,8,9,10)，确认后即可显示出E44至J44单元和区域和数值7，8，9，10中的最大值。<br />
            　　特别提醒：如果参数中有文本或逻辑值，则忽略。</span></div>
            <div align="left"><span style="font-size: 12pt">　　20、MID函数<br />
            　　函数名称：MID<br />
            　　主要功能：从一个文本字符串的指定位置开始，截取指定数目的字符。<br />
            　　使用格式：MID(text,start_num,num_chars)<br />
            　　参数说明：text代表一个文本字符串；start_num表示指定的起始位置；num_chars表示要截取的数目。<br />
            　　应用举例：假定A47单元格中保存了&#8220;我喜欢天极网&#8221;的字符串，我们在C47单元格中输入公式：=MID(A47,4,3)，确认后即显示出&#8220;天极网&#8221;的字符。<br />
            　　特别提醒：公式中各参数间，要用英文状态下的逗号&#8220;,&#8221;隔开。</span></div>
            <div align="left"><span style="font-size: 12pt">　　21、MIN函数<br />
            　　函数名称：MIN<br />
            　　主要功能：求出一组数中的最小值。<br />
            　　使用格式：MIN(number1,number2&#8230;&#8230;)<br />
            　　参数说明：number1,number2&#8230;&#8230;代表需要求最小值的数值或引用单元格（区域），参数不超过30个。<br />
            　　应用举例：输入公式：=MIN(E44:J44,7,8,9,10)，确认后即可显示出E44至J44单元和区域和数值7，8，9，10中的最小值。<br />
            　　特别提醒：如果参数中有文本或逻辑值，则忽略。</span></div>
            <div align="left"><span style="font-size: 12pt">　　22、MOD函数<br />
            　　函数名称：MOD<br />
            　　主要功能：求出两数相除的余数。<br />
            　　使用格式：MOD(number,divisor)<br />
            　　参数说明：number代表被除数；divisor代表除数。<br />
            　　应用举例：输入公式：=MOD(13,4)，确认后显示出结果&#8220;1&#8221;。<br />
            　　特别提醒：如果divisor参数为零，则显示错误值&#8220;#DIV/0!&#8221;；MOD函数可以借用函数INT来表示：上述公式可以修改为：=13-4*INT(13/4)。</span></div>
            <div align="left"><span style="font-size: 12pt">　　23、MONTH函数<br />
            　　函数名称：MONTH<br />
            　　主要功能：求出指定日期或引用单元格中的日期的月份。<br />
            　　使用格式：MONTH(serial_number)<br />
            　　参数说明：serial_number代表指定的日期或引用的单元格。<br />
            　　应用举例：输入公式：=MONTH("2003-12-18")，确认后，显示出11。<br />
            　　特别提醒：如果是给定的日期，请包含在英文双引号中；如果将上述公式修改为：=YEAR("2003-12-18")，则返回年份对应的值&#8220;2003&#8221;。</span></div>
            <div align="left"><span style="font-size: 12pt">　　24、NOW函数<br />
            　　函数名称：NOW<br />
            　　主要功能：给出当前系统日期和时间。<br />
            　　使用格式：NOW()<br />
            　　参数说明：该函数不需要参数。　　<br />
            　　应用举例：输入公式：=NOW()，确认后即刻显示出当前系统日期和时间。如果系统日期和时间发生了改变，只要按一下F9功能键，即可让其随之改变。<br />
            　　特别提醒：显示出来的日期和时间格式，可以通过单元格格式进行重新设置。</span></div>
            <div align="left"><span style="font-size: 12pt">　　25、OR函数<br />
            　　函数名称：OR<br />
            　　主要功能：返回逻辑值，仅当所有参数值均为逻辑&#8220;假（FALSE）&#8221;时返回函数结果逻辑&#8220;假（FALSE）&#8221;，否则都返回逻辑&#8220;真（TRUE）&#8221;。<br />
            　　使用格式：OR(logical1,logical2, ...)<br />
            　　参数说明：Logical1,Logical2,Logical3&#8230;&#8230;：表示待测试的条件值或表达式，最多这30个。<br />
            　　应用举例：在C62单元格输入公式：=OR(A62&gt;=60,B62&gt;=60)，确认。如果C62中返回TRUE，说明A62和B62中的数值至少有一个大于或等于60，如果返回FALSE，说明A62和B62中的数值都小于60。<br />
            　　特别提醒：如果指定的逻辑条件参数中包含非逻辑值时，则函数返回错误值&#8220;#VALUE!&#8221;或&#8220;#NAME&#8221;。</span></div>
            <div align="left"><span style="font-size: 12pt">　　26、RANK函数<br />
            　　函数名称：RANK<br />
            　　主要功能：返回某一数值在一列数值中的相对于其他数值的排位。<br />
            　　使用格式：RANK（Number,ref,order）<br />
            　　参数说明：Number代表需要排序的数值；ref代表排序数值所处的单元格区域；order代表排序方式参数（如果为&#8220;0&#8221;或者忽略，则按降序排名，即数值越大，排名结果数值越小；如果为非&#8220;0&#8221;值，则按升序排名，即数值越大，排名结果数值越大；）。　　<br />
            　　应用举例：如在C2单元格中输入公式：=RANK(B2,$B$2:$B$31,0)，确认后即可得出丁1同学的语文成绩在全班成绩中的排名结果。<br />
            　　特别提醒：在上述公式中，我们让Number参数采取了相对引用形式，而让ref参数采取了绝对引用形式（增加了一个&#8220;$&#8221;符号），这样设置后，选中C2单元格，将鼠标移至该单元格右下角，成细十字线状时（通常称之为&#8220;填充柄&#8221;），按住左键向下拖拉，即可将上述公式快速复制到C列下面的单元格中，完成其他同学语文成绩的排名统计。</span></div>
            <div align="left"><span style="font-size: 12pt">　　27、RIGHT函数<br />
            　　函数名称：RIGHT<br />
            　　主要功能：从一个文本字符串的最后一个字符开始，截取指定数目的字符。<br />
            　　使用格式：RIGHT(text,num_chars)<br />
            　　参数说明：text代表要截字符的字符串；num_chars代表给定的截取数目。　　<br />
            　　应用举例：假定A65单元格中保存了&#8220;我喜欢天极网&#8221;的字符串，我们在C65单元格中输入公式：=RIGHT(A65,3)，确认后即显示出&#8220;天极网&#8221;的字符。<br />
            　　特别提醒：Num_chars参数必须大于或等于0，如果忽略，则默认其为1；如果num_chars参数大于文本长度，则函数返回整个文本。</span></div>
            <div align="left"><span style="font-size: 12pt">　　28、SUBTOTAL函数<br />
            　　函数名称：SUBTOTAL<br />
            　　主要功能：返回列表或数据库中的分类汇总。<br />
            　　使用格式：SUBTOTAL(function_num, ref1, ref2, ...)<br />
            　　参数说明：Function_num为1到11（包含隐藏值）或101到111（忽略隐藏值）之间的数字，用来指定使用什么函数在列表中进行分类汇总计算（如图6）；ref1, ref2,&#8230;&#8230;代表要进行分类汇总区域或引用，不超过29个。<br />
            　　应用举例：如图7所示，在B64和C64单元格中分别输入公式：=SUBTOTAL(3,C2:C63)和=SUBTOTAL103,C2:C63)，并且将61行隐藏起来，确认后，前者显示为62（包括隐藏的行），后者显示为61，不包括隐藏的行。</span></div>
            <div align="left"><span style="font-size: 12pt"><br />
            <br />
            </span><span style="font-size: 12pt">　　特别提醒：如果采取自动筛选，无论function_num参数选用什么类型，SUBTOTAL函数忽略任何不包括在筛选结果中的行；SUBTOTAL函数适用于数据列或垂直区域，不适用于数据行或水平区域。</span></div>
            <div align="left"><span style="font-size: 12pt">　　29、函数名称：SUM<br />
            　　主要功能：计算所有参数数值的和。<br />
            　　使用格式：SUM（Number1,Number2&#8230;&#8230;）<br />
            　　参数说明：Number1、Number2&#8230;&#8230;代表需要计算的值，可以是具体的数值、引用的单元格（区域）、逻辑值等。　　<br />
            　　应用举例：如图7所示，在D64单元格中输入公式：=SUM(D2:D63)，确认后即可求出语文的总分。<br />
            　　特别提醒：如果参数为数组或引用，只有其中的数字将被计算。数组或引用中的空白单元格、逻辑值、文本或错误值将被忽略；如果将上述公式修改为：=SUM(LARGE(D2:D63,{1,2,3,4,5}))，则可以求出前5名成绩的和。</span></div>
            <div align="left"><span style="font-size: 12pt">　　30、SUMIF函数<br />
            　　函数名称：SUMIF<br />
            　　主要功能：计算符合指定条件的单元格区域内的数值和。<br />
            　　使用格式：SUMIF（Range,Criteria,Sum_Range）<br />
            　　参数说明：Range代表条件判断的单元格区域；Criteria为指定条件表达式；Sum_Range代表需要计算的数值所在的单元格区域。<br />
            　　应用举例：如图7所示，在D64单元格中输入公式：=SUMIF(C2:C63,"男",D2:D63)，确认后即可求出&#8220;男&#8221;生的语文成绩和。<br />
            　　特别提醒：如果把上述公式修改为：=SUMIF(C2:C63,"女",D2:D63)，即可求出&#8220;女&#8221;生的语文成绩和；其中&#8220;男&#8221;和&#8220;女&#8221;由于是文本型的，需要放在英文状态下的双引号（"男"、"女"）中。</span></div>
            <div align="left"><span style="font-size: 12pt">　　31、TEXT函数<br />
            　　函数名称：TEXT<br />
            　　主要功能：根据指定的数值格式将相应的数字转换为文本形式。<br />
            　　使用格式：TEXT(value,format_text)<br />
            　　参数说明：value代表需要转换的数值或引用的单元格；format_text为指定文字形式的数字格式。<br />
            　　应用举例：如果B68单元格中保存有数值1280.45，我们在C68单元格中输入公式：=TEXT(B68, "$0.00")，确认后显示为&#8220;$1280.45&#8221;。<br />
            　　特别提醒：format_text参数可以根据&#8220;单元格格式&#8221;对话框&#8220;数字&#8221;标签中的类型进行确定。</span></div>
            <div align="left"><span style="font-size: 12pt">　　32、TODAY函数<br />
            　　函数名称：TODAY<br />
            　　主要功能：给出系统日期。<br />
            　　使用格式：TODAY()<br />
            　　参数说明：该函数不需要参数。　　<br />
            　　应用举例：输入公式：=TODAY()，确认后即刻显示出系统日期和时间。如果系统日期和时间发生了改变，只要按一下F9功能键，即可让其随之改变。<br />
            　　特别提醒：显示出来的日期格式，可以通过单元格格式进行重新设置（参见附件）。</span></div>
            <div align="left"><span style="font-size: 12pt">　　33、VALUE函数<br />
            　　函数名称：VALUE<br />
            　　主要功能：将一个代表数值的文本型字符串转换为数值型。<br />
            　　使用格式：VALUE(text)<br />
            　　参数说明：text代表需要转换文本型字符串数值。　　<br />
            　　应用举例：如果B74单元格中是通过LEFT等函数截取的文本型字符串，我们在C74单元格中输入公式：=VALUE(B74)，确认后，即可将其转换为数值型。<br />
            　　特别提醒：如果文本型数值不经过上述转换，在用函数处理这些数值时，常常返回错误。</span></div>
            <div align="left"><span style="font-size: 12pt">　　34、VLOOKUP函数<br />
            　　函数名称：VLOOKUP<br />
            　　主要功能：在数据表的首列查找指定的数值，并由此返回数据表当前行中指定列处的数值。<br />
            　　使用格式：VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)<br />
            参数说明：Lookup_value代表需要查找的数值；Table_array代表需要在其中查找数据的单元格区域；Col_index_num为在table_array区域中待返回的匹配值的列序号（当Col_index_num为2时,返回table_array第2列中的数值，为3时，返回第3列的值&#8230;&#8230;）；Range_lookup为一逻辑值，如果为TRUE或省略，则返回近似匹配值，也就是说，如果找不到精确匹配值，则返回小于lookup_value的最大数值；如果为FALSE，则返回精确匹配值，如果找不到，则返回错误值#N/A。<br />
            　　应用举例：参见图7，我们在D65单元格中输入公式：=VLOOKUP(B65,B2:D63,3,FALSE)，确认后，只要在B65单元格中输入一个学生的姓名（如丁48），D65单元格中即刻显示出该学生的语言成绩。<br />
            　　特别提醒：Lookup_value参见必须在Table_array区域的首列中；如果忽略Range_lookup参数，则Table_array的首列必须进行排序；在此函数的向导中，有关Range_lookup参数的用法是错误的。</span></div>
            <div align="left"><span style="font-size: 12pt">　　35、WEEKDAY函数<br />
            　　函数名称：WEEKDAY<br />
            　　主要功能：给出指定日期的对应的星期数。<br />
            　　使用格式：WEEKDAY(serial_number,return_type)<br />
            　　参数说明：serial_number代表指定的日期或引用含有日期的单元格；return_type代表星期的表示方式[当Sunday（星期日）为1、Saturday（星期六）为7时，该参数为1；当Monday（星期一）为1、Sunday（星期日）为7时，该参数为2（这种情况符合中国人的习惯）；当Monday（星期一）为0、Sunday（星期日）为6时，该参数为3]。<br />
            　　应用举例：输入公式：=WEEKDAY(TODAY(),2)，确认后即给出系统日期的星期数。<br />
            　　特别提醒：如果是指定的日期，请放在英文状态下的双引号中，如=WEEKDAY("2003-12-18",2)。</span></div>
            </td>
        </tr>
    </tbody>
</table>
</p>
<div align="left"><span style="font-size: 10pt">一。单元格颜色效果</span></div>
<div align="left"><span style="font-size: 10pt">全选表格，格式－条件格式，条件选择&#8220;公式&#8221;，公式如下，然后选&#8220;格式&#8221;按钮，&#8220;图案&#8221;，选择需要颜色。</span></div>
<div align="left"><span style="font-size: 10pt">1.</span><span style="font-size: 10pt">隔行颜色效果（奇数行颜色）：<br />
=MOD(ROW(),2)=1</span></div>
<div align="left"><span style="font-size: 10pt">2.</span><span style="font-size: 10pt">隔行颜色效果（偶数行颜色）：<br />
=MOD(ROW(),2)=0</span></div>
<div align="left"><span style="font-size: 10pt">3.</span><span style="font-size: 10pt">如果希望设置格式为每3行应用一次底纹，可以使用公式：<br />
=MOD(ROW(),3)=1</span></div>
<div align="left"><span style="font-size: 10pt">4.</span><span style="font-size: 10pt">如果希望设置奇偶列不同底纹，只要把公式中的ROW()改为COLUMN()即可，如：<br />
=MOD(COLUMN(),2)</span></div>
<div align="left"><span style="font-size: 10pt">5.</span><span style="font-size: 10pt">如果希望设置国际象棋棋盘式底纹(白色＋自定义色):<br />
=MOD(ROW()+COLUMN(),2) </span></div>
<div align="left"><span style="font-size: 10pt">说明：该条件格式的公式用于判断行号与列号之和除以2的余数是否为0。如果为0，说明行数与列数的奇偶性相同，则填充单元格为指定色，否则就不填充。在条件格式中，公式结果返回一个数字时，非0数字即为TRUE，0和错误值为FALSE。因此，上面的公式也可以写为：<br />
=MOD(ROW()+COLUMN(),2)&lt;&gt;0</span></div>
<div align="left"><span style="font-size: 10pt">6.</span><span style="font-size: 10pt">如果希望设置国际象棋棋盘式底纹(自定义色＋自定义色):<br />
加入样式2：<br />
=MOD(ROW()+COLUMN(),2)=0 </span></div>
<div align="left"><span style="font-size: 10pt">二。用颜色进行筛选</span></div>
<div align="left"><span style="font-size: 10pt">excel2007</span><span style="font-size: 10pt">可以按单元格颜色、字体颜色或图标进行排序。</span></div>
<div align="left"><span style="font-size: 10pt">如果是excel2003，需要添加辅助列，用定义名称的方法得到对应的颜色号，然后对辅助列进行排序：</span></div>
<div align="left"><span style="font-size: 10pt">颜色单元格在A列，选中B1,插入-&gt;名称-&gt;定义，输入a，下面输入公式 =get.cell(24,$a1)，</span></div>
<div align="left"><span style="font-size: 10pt">此法可得到字体色的序列号。 B1输入 =a 将公式向下复制到相应行。</span></div>
<div align="left"><span style="font-size: 10pt">将全表按B列排序即可。若是想获得背景色序列号，将24改成63即可。</span></div>
<div align="left"><span style="font-size: 10pt">＝＝》说明一下：</span></div>
<div align="left"><span style="font-size: 10pt">1.Excel2003</span><span style="font-size: 10pt">中没有相应的函数，但可以用Excel4.0的一个叫Get.Cell的宏函数，但宏函数不能直接在Excel2003中直接用，必须定义成名称才能使用 <br />
2.Get.Cell(Num,Cell)是这个函数的格式，Get.Cell可以取得一个单元格中的多种信息，如边框格式等，Num指定的就是要取得那类信息，24就是让这个函数取出单元的颜色信息，取出来后是一个1－56的数字，表示某种颜色的编号 <br />
3.如果你在B1列输入你定义的名称并填充了，那么B1中的数字就是A1中的颜色代码，B2中的数字就将是A2中的颜色代码，以此类推 <br />
4.现在你再按B列排序，实际上就是按A列的颜色排序的了。</span></div>
<div align="left"><span style="font-size: 10pt">附上Get.Cell的各参数代表的意义： </span></div>
<div align="left"><span style="font-size: 10pt">1 </span><span style="font-size: 10pt">参照储存格的绝对地址 <br />
2 参照储存格的列号 <br />
3 参照储存格的栏号 <br />
4 类似 TYPE 函数 <br />
5 参照地址的内容 <br />
6 文字显示参照地址的公式 <br />
7 参照地址的格式，文字显示 <br />
8 文字显示参照地址的格式 <br />
9 传回储存格外框左方样式，数字显示 <br />
10 传回储存格外框右方样式，数字显示 <br />
11 传回储存格外框方上样式，数字显示 <br />
12 传回储存格外框方下样式，数字显示 <br />
13 传回内部图样，数字显示 <br />
14 如果储存格被设定 locked传回 True <br />
15 如果公式处于隐藏状态传回 True <br />
16 传回储存格宽度 <br />
17 以点为单位传回储存格高度 <br />
18 字型名称 <br />
19 以点为单位传回字号 <br />
20 如果储存格所有或第一个字符为加粗传回 True <br />
21 如果储存格所有或第一个字符为斜体传回 True <br />
22 如果储存格所有或第一个字符为单底线传回True <br />
23 如果储存格所有或第一个字符字型中间加了一条水平线传回 True <br />
24 传回储存格第一个字符色彩数字， 1 至 56。如果设定为自动，传回 0 <br />
25 MS Excel不支持大纲格式 <br />
26 MS Excel不支持阴影格式 <br />
27 数字显示手动插入的分页线设定 <br />
28 大纲的列层次 <br />
29 大纲的栏层次 <br />
30 如果范围为大纲的摘要列则为 True <br />
31 如果范围为大纲的摘要栏则为 True <br />
32 显示活页簿和工作表名称 <br />
33 如果储存格格式为多行文字则为 True <br />
34 传回储存格外框左方色彩，数字显示。如果设定为自动，传回 0 <br />
35 传回储存格外框右方色彩，数字显示。如果设定为自动，传回 0 <br />
36 传回储存格外框上方色彩，数字显示。如果设定为自动，传回 0 <br />
37 传回储存格外框下方色彩，数字显示。如果设定为自动，传回 0 <br />
38 传回储存格前景阴影色彩，数字显示。如果设定为自动，传回 0 <br />
39 传回储存格背影阴影色彩，数字显示。如果设定为自动，传回 0 <br />
40 文字显示储存格样式 <br />
41 传回参照地址的原始公式 <br />
42 以点为单位传回使用中窗口左方至储存格左方水平距离 <br />
43 以点为单位传回使用中窗口上方至储存格上方垂直距离 <br />
44 以点为单位传回使用中窗口左方至储存格右方水平距离 <br />
45 以点为单位传回使用中窗口上方至储存格下方垂直距离 <br />
46 如果储存格有插入批注传回 True <br />
47 如果储存格有插入声音提示传回 True <br />
48 如果储存格有插入公式传回 True <br />
49 如果储存格是数组公式的范围传回 True <br />
50 传回储存格垂直对齐，数字显示 <br />
51 传回储存格垂直方向，数字显示 <br />
52 传回储存格前缀字符 <br />
53 文字显示传回储存格显示内容 <br />
54 传回储存格数据透视表名称 <br />
55 传回储存格在数据透视表的位置 <br />
56 枢纽分析 <br />
57 如果储存格所有或第一个字符为上标传回True <br />
58 文字显示传回储存格所有或第一个字符字型样式 <br />
59 传回储存格底线样式，数字显示 <br />
60 如果储存格所有或第一个字符为下标传回True <br />
61 枢纽分析 <br />
62 显示活页簿和工作表名称 <br />
63 传回储存格的填满色彩 <br />
64 传回图样前景色彩 <br />
65 枢纽分析 <br />
66 显示活页簿名称 </span></div>
<img src ="http://www.blogjava.net/hefang/aggbug/324487.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hefang/" target="_blank">何方</a> 2010-06-25 17:53 <a href="http://www.blogjava.net/hefang/articles/324487.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>由一个页面传参数到另一个模式窗体，如何接受值？</title><link>http://www.blogjava.net/hefang/articles/324481.html</link><dc:creator>何方</dc:creator><author>何方</author><pubDate>Fri, 25 Jun 2010 09:48:00 GMT</pubDate><guid>http://www.blogjava.net/hefang/articles/324481.html</guid><wfw:comment>http://www.blogjava.net/hefang/comments/324481.html</wfw:comment><comments>http://www.blogjava.net/hefang/articles/324481.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hefang/comments/commentRss/324481.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hefang/services/trackbacks/324481.html</trackback:ping><description><![CDATA[<p>由一个页面传参数到另一个模式窗体，如何接受值？<br />
&nbsp;</p>
<div>传参: window.showModalDialog("proxyCompany.jsp",{"sDomainName":sDomainName},</div>
<div style="text-indent: 21pt">'dialogWidth:760px;dialogHeight:900px;');</div>
<div>接受: var sDomainName= window.dialogArguments.sDomainName;</div>
<div align="left">返回：<span style="color: black">window.returnValue = params;</span></div>
<div style="text-indent: 21pt"><span style="color: black">window.close();</span></div>
<img src ="http://www.blogjava.net/hefang/aggbug/324481.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hefang/" target="_blank">何方</a> 2010-06-25 17:48 <a href="http://www.blogjava.net/hefang/articles/324481.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>js中替换字符串</title><link>http://www.blogjava.net/hefang/articles/324476.html</link><dc:creator>何方</dc:creator><author>何方</author><pubDate>Fri, 25 Jun 2010 09:29:00 GMT</pubDate><guid>http://www.blogjava.net/hefang/articles/324476.html</guid><wfw:comment>http://www.blogjava.net/hefang/comments/324476.html</wfw:comment><comments>http://www.blogjava.net/hefang/articles/324476.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hefang/comments/commentRss/324476.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hefang/services/trackbacks/324476.html</trackback:ping><description><![CDATA[<p>//要求把一个字符串里把所有的&#8220;a&#8221;和&#8220;A&#8221;替换成&#8220;B&#8221;；&nbsp;</p>
<p>function fun()<br />
&nbsp;{<br />
&nbsp;&nbsp;var str ="abcAd";<br />
&nbsp;&nbsp;var str2 ="a";<br />
&nbsp;&nbsp;str = str.toLowerCase();<br />
&nbsp;&nbsp;alert(str);<br />
&nbsp;&nbsp;str=str.replace(new RegExp(str2,"g"),"B");<br />
&nbsp;&nbsp;alert(str);<br />
&nbsp;}</p>
<img src ="http://www.blogjava.net/hefang/aggbug/324476.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hefang/" target="_blank">何方</a> 2010-06-25 17:29 <a href="http://www.blogjava.net/hefang/articles/324476.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在JS的（字符串）数组中针对每个元素的内容进行查找和替换</title><link>http://www.blogjava.net/hefang/articles/324474.html</link><dc:creator>何方</dc:creator><author>何方</author><pubDate>Fri, 25 Jun 2010 09:26:00 GMT</pubDate><guid>http://www.blogjava.net/hefang/articles/324474.html</guid><wfw:comment>http://www.blogjava.net/hefang/comments/324474.html</wfw:comment><comments>http://www.blogjava.net/hefang/articles/324474.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hefang/comments/commentRss/324474.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hefang/services/trackbacks/324474.html</trackback:ping><description><![CDATA[<div style="text-indent: 2em">
<p>JavaScript提供了在字符串中查找子串的函数indexOf()、lastIndexOf()、search()，还提供了字符串的替换函数replace()，而这些函数没有在数组对象Array中实现。</p>
</div>
<div style="text-indent: 2em">
<p>为了让Array也支持以上方法，我们可以对Array对象原型进行修改，增加了相应函数。让这些函数和String对象的函数同名且语法相近，以方便我们使用。下面做一些简单介绍，读者也可根据需要自己定义其它方法。<br />
<font color="#339933">//判断一个字符串是否包含另一个字符串,substr：子字符串，start：开始位置<br />
</font>Array.prototype.indexOf=function(substr,start){<br />
<wbr></wbr>var ta,rt,d='\0';<br />
<wbr></wbr>if(start!=null){ta=this.slice(start);rt=start;}else{ta=this;rt=0;}<br />
<wbr></wbr>var str=d+ta.join(d)+d,t=str.indexOf(d+substr+d);<br />
<wbr></wbr>if(t==-1)return -1;rt+=str.slice(0,t).replace(/[^\0]/g,'').length;<br />
<wbr></wbr>return rt;<br />
}<br />
<font color="#009933">//该方法自右向左查找，返回substr在strObj中最后出现的位置，如果没有找到，返回-1。<br />
</font>Array.prototype.lastIndexOf=function(substr,start){<br />
<wbr></wbr>var ta,rt,d='\0';<br />
<wbr></wbr>if(start!=null){ta=this.slice(start);rt=start;}else{ta=this;rt=0;}<br />
<wbr></wbr>ta=ta.reverse();var str=d+ta.join(d)+d,t=str.indexOf(d+substr+d);<br />
<wbr></wbr>if(t==-1)return -1;rt+=str.slice(t).replace(/[^\0]/g,'').length-2;<br />
<wbr></wbr>return rt;<br />
}<br />
<font color="#009933">//该方法替换字符串中的reg为rpby，比较常用。</font><br />
Array.prototype.replace=function(reg,rpby){<br />
<wbr></wbr>var ta=this.slice(0),d='\0';<br />
<wbr></wbr>var str=ta.join(d);str=str.replace(reg,rpby);<br />
<wbr></wbr>return str.split(d);<br />
}<br />
<font color="#009933">//寻找字符串中的指定子串</font><br />
Array.prototype.search=function(reg){<br />
<wbr></wbr>var ta=this.slice(0),d='\0',str=d+ta.join(d)+d,regstr=reg.toString();<br />
<wbr></wbr>reg=new RegExp(regstr.replace(/\/((.|\n)+)\/.*/g,'\\0$1\\0'),regstr.slice(regstr.lastIndexOf('/')+1));<br />
<wbr></wbr>t=str.search(reg);if(t==-1)return -1;return str.slice(0,t).replace(/[^\0]/g,'').length;<br />
}</p>
<p>以上四种方法均实现了对数组中每个元素都进行查找或替换，这样大家就不用做个循环浪费时间了。<br />
<font style="font-size: 18px" color="#ff0000"><strong>二、Js对字符串的操作。</strong></font></p>
<p><font style="font-size: 16px" color="#006633"><strong>1、字符串的创建<br />
</strong></font><wbr></wbr><wbr></wbr><wbr></wbr>创建一个字符串有几种方法。最简单的是用引号将一组字符包含起来，可以将其赋值给一个字符串变量。<br />
<wbr></wbr><wbr></wbr><wbr></wbr>var myStr = "Hello, String!";<br />
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>我们在上面脚本创建了字符串，但本质上，它们并不是真正的字符串对象，准确地说，它们是字符串类型的值。要创建一个字符串对象，可使用如下语句：var strObj = new String("Hello, String!");<br />
<wbr></wbr><wbr></wbr><wbr></wbr>使用typeof运算符查看会发现，上面的myStr类型为string，而strObj类型为object。<br />
<wbr></wbr><wbr></wbr><wbr></wbr>如果想知道字符串的长度，使用其length属性：string.length。<br />
<wbr></wbr><wbr></wbr><wbr></wbr>得到字符串的指定位置的字符使用方法：string.charAt(index);</p>
<p><strong><font style="font-size: 16px"><font color="#006633">2、字符串的拼接</font><br />
</font></strong><wbr></wbr><wbr></wbr><wbr></wbr>非常简单，就用一个"+"将两个字符串"相加"：<br />
<wbr></wbr><wbr></wbr><wbr></wbr>var longString = "One piece " + "plus one more piece.";<br />
<wbr></wbr><wbr></wbr><wbr></wbr>要将多个字符串累积为一个字符串，还可以使用"+="操作符：<br />
<wbr></wbr><wbr></wbr><wbr></wbr>var result = "";<br />
<wbr></wbr><wbr></wbr><wbr></wbr>result += "My name is Anders"<br />
<wbr></wbr><wbr></wbr><wbr></wbr>result += " and my age is 25"; <wbr></wbr><wbr></wbr><wbr></wbr><br />
<wbr></wbr><wbr></wbr><wbr></wbr>要在字符串中添加换行符，需要使用转义字符"\n"：<br />
<wbr></wbr><wbr></wbr><wbr></wbr>var confirmString = "You did not enter a response to the last " +<br />
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>"question.\n\nSubmit form anyway?";<br />
<wbr></wbr><wbr></wbr><wbr></wbr>var confirmValue = confirm(confirmString);<br />
<wbr></wbr><wbr></wbr><wbr></wbr>但这种方法只能用在像警告、确认对话框之类的情况下，如果将这段文本作为HTML内容呈现，就无效了，此时用"&lt;br&gt;"代替它：<br />
<wbr></wbr><wbr></wbr><wbr></wbr>var htmlString = "First line of string.&lt;br&gt;Second line of string.";<br />
<wbr></wbr><wbr></wbr><wbr></wbr>document.write(htmlString);</p>
<p><wbr></wbr><wbr></wbr><wbr></wbr>String对象还提供了方法concat()，它完成与"+"相同的功能：<br />
<wbr></wbr><wbr></wbr><wbr></wbr>string.concat(value1, value2, ...)<br />
<wbr></wbr><wbr></wbr><wbr></wbr>不过concat()方法显然不如"+"来得直观简洁。</p>
<p><font style="font-size: 16px" color="#006633"><strong>3、访问字符串的子串</strong></font><br />
<wbr></wbr><wbr></wbr><wbr></wbr>使用substring()或slice()方法(NN4+, IE4+)，下面说明它们的具体用法。<br />
<wbr></wbr><wbr></wbr><wbr></wbr>substring()的原型为： <wbr></wbr>string.substring(from, to)<br />
<wbr></wbr><wbr></wbr><wbr></wbr>第一个参数from指定了子字符串在原字符串中的起始位置(基于0的索引)；第二个参数to是可选的，它指定了子字符串在原字符串的结束位置(基于0的索引)，一般情况下，它应比from大，如果它被省略，那么子字符串将一直到原字符串的结尾处。<br />
<wbr></wbr><wbr></wbr><wbr></wbr>如果参数from不小心比参数to大了会怎样？JavaScript会自动调解子字符串的起止位置，也就是说，substring()总是从两个参数中较小的那个开始，到较大的那个结束。不过要注意，它包含起始位置的那个字符，但不包含结束位置的那个字符。<br />
<wbr></wbr><wbr></wbr><wbr></wbr>var fullString = "Every dog has his day.";<br />
<wbr></wbr><wbr></wbr><wbr></wbr>var section = fullString.substring(0, 4); // section is "Ever".</p>
<p>slice()的原型为： <wbr></wbr>string.slice(start, end)<br />
<wbr></wbr><wbr></wbr><wbr></wbr>参数start表示子串的起始位置，如果为负数，那么可以理解为倒数第几个开始，例如-3表示从倒数第三个开始；参数end表示结束位置，与start一样，它也可以为负数，其含义也表示到倒数第几个结束。slice()的参数可以为负数，所以要比substring()更加灵活，但没那么宽容了，如果start比end要大，它将返回一个空字符串(示例略)。<br />
<wbr></wbr><wbr></wbr><wbr></wbr>还有一个方法是substr()，其原型为： string.substr(start, length)<br />
<wbr></wbr><wbr></wbr><wbr></wbr>从原型可以看出它的参数的含义，start表示起始位置，length则表示子字符串的长度。JavaScript标准不提倡使用该方法。<br />
<font style="font-size: 16px"><strong><font color="#006633">4、字符串的大小写转换</font><br />
</strong></font><wbr></wbr><wbr></wbr><wbr></wbr>使用toLowerCase()和toUpperCase()方法：<br />
<wbr></wbr><wbr></wbr><wbr></wbr>var city = "ShanGHai";<br />
<wbr></wbr><wbr></wbr><wbr></wbr>city = city.toLowerCase(); <wbr></wbr>// city is "shanghai" now.<br />
<font style="font-size: 16px" color="#006633"><strong>5、判断两个字符串是否相等</strong></font><br />
<wbr></wbr><wbr></wbr><wbr></wbr>先将用户的输入值全部转换为大写（或小写），然后再行比较：<br />
<wbr></wbr><wbr></wbr><wbr></wbr>var name = document.form1.txtUserName.value.toLowerCase();<br />
<wbr></wbr><wbr></wbr><wbr></wbr>if(name == "urname")<br />
<wbr></wbr><wbr></wbr><wbr></wbr>{<br />
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>// statements go here.<br />
<wbr></wbr><wbr></wbr><wbr></wbr>}<br />
<wbr></wbr><wbr></wbr><wbr></wbr>JavaScript有两种相等运算符。一种是完全向后兼容的，标准的"=="，如果两个操作数类型不一致，它会在某些时候自动对操作数进行类型转换，考虑下面的赋值语句：<br />
<wbr></wbr><wbr></wbr><wbr></wbr>var strA = "i love you!";<br />
<wbr></wbr><wbr></wbr><wbr></wbr>var strB = new String("i love you!");<br />
<wbr></wbr><wbr></wbr><wbr></wbr>这两个变量含有相同的字符序列，但数据类型却不同，前者为string，后者为object，在使用"=="操作符时，JavaScript会尝试各种求值，以检测两者是否会在某种情况下相等。所以下面的表达式结果为true： strA == strB。<br />
<wbr></wbr><wbr></wbr><wbr></wbr>第二种操作符是"严格"的"==="，它在求值时不会这么宽容，不会进行类型转换。所以表达式strA === strB的值为false，虽然两个变量持有的值相同。<br />
<wbr></wbr><wbr></wbr><wbr></wbr>有时代码的逻辑要求你判断两个值是否不相等，这里也有两个选择："!="和严格的"!=="，它们的关系就类似于"=="和"==="。<br />
讨论：<br />
<wbr></wbr><wbr></wbr><wbr></wbr>"=="和"!="在求值时会尽可能地寻找值的匹配性，但你可能还是想在比较前进行显式的类型转换，以"帮助"它们完成工作。比如，如果想判断一个用户的输入值（字符串）是否等于一个数字，你可以让"=="帮你完成类型转换：<br />
<wbr></wbr><wbr></wbr><wbr></wbr>if(document.form1.txtAge.value == someNumericVar) { ... }<br />
<wbr></wbr><wbr></wbr><wbr></wbr>也可以提前转换：<br />
<wbr></wbr><wbr></wbr><wbr></wbr>if(parseInt(document.form1.txtAge.value) == someNumericVar) { ... }<br />
<wbr></wbr><wbr></wbr><wbr></wbr>如果你比较习惯于强类型的编程语言(比如C#,Java等)，那么这里你可以延续你的习惯(类型转换)，这样也会增强程序的可读性。</p>
<p><wbr></wbr><wbr></wbr><wbr></wbr>有一种情况需要注意，就是计算机的区域设置。如果用"&lt;"和"&gt;"来比较字符串，那么JavaScript把它们作为Unicode来比较，但显然，人们在浏览网页时不会把文本当作Unicode来阅读:) 比如在西班牙语中，按照传统的排序，"ch"将作为一个字符排在"c"和"d"之间。localeCompare()提供了一种方式，可以帮助你使用默认区域设置下的字符排序规则。<br />
<wbr></wbr><wbr></wbr><wbr></wbr>var strings; <wbr></wbr>// 要排序的字符串数组，假设已经得到初始化<br />
<wbr></wbr><wbr></wbr><wbr></wbr>strings.sort(function(a,b) { return a.localeCompare(b) }); <wbr></wbr>// 调用sort()方法进行排序</p>
<p><font style="font-size: 16px" color="#006633"><strong>6、字符串的查找</strong></font><br />
<wbr></wbr><wbr></wbr><wbr></wbr>使用string的indexOf()方法：<br />
<wbr></wbr><wbr></wbr><wbr></wbr>strObj.indexOf(subString[, startIndex])<br />
<wbr></wbr><wbr></wbr><wbr></wbr>strObj为要进行判断的字符串，subString为要在strObj查找的子字符串，startIndex是可选的，表示查找的开始位置(基于0的索引)，如果startIndex省略，则从strObj开始处查找，如果startIndex小于0，则从0开始，如果startIndex大于最大索引，则从最大索引处开始。<br />
<wbr></wbr><wbr></wbr><wbr></wbr>indexOf()返回strObj中subString的开始位置，如果没有找到，则返回-1。在脚本中，可以这么使用：<br />
<wbr></wbr><wbr></wbr><wbr></wbr>if(largeString.indexOf(shortString) != -1)<br />
<wbr></wbr><wbr></wbr><wbr></wbr>{<br />
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>// 如果包含，进行相应处理；<br />
<wbr></wbr><wbr></wbr><wbr></wbr>}<br />
<wbr></wbr><wbr></wbr><wbr></wbr>也许一个字符串会包含另一字符串不止一次，这时第二个参数startIndex也许会派上用场，下面这个函数演示如何求得一个字符串包含另外一个字符串的次数：<br />
<wbr></wbr><wbr></wbr><wbr></wbr>function countInstances(mainStr, subStr)<br />
<wbr></wbr><wbr></wbr><wbr></wbr>{<br />
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>var count = 0;<br />
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>var offset = 0;<br />
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>do<br />
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>{<br />
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>offset = mainStr.indexOf(subStr, offset);<br />
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>if(offset != -1)<br />
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>{<br />
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>count++;<br />
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>offset += subStr.length;<br />
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>}<br />
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>}while(offset != -1)<br />
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>return count;<br />
<wbr></wbr><wbr></wbr><wbr></wbr>}<br />
<wbr></wbr><wbr></wbr><wbr></wbr>String对象有一个与indexOf()对应的方法，lastIndexOf()：<br />
<wbr></wbr><wbr></wbr><wbr></wbr>strObj.lastIndexOf(substring[, startindex])<br />
<wbr></wbr><wbr></wbr><wbr></wbr>strObj为要进行判断的字符串，subString为要在strObj查找的子字符串，startIndex是可选的，表示查找的开始位置(基于0的索引)，如果startIndex省略，则从strObj末尾处查找，如果startIndex小于0，则从0开始，如果startIndex大于最大索引，则从最大索引处开始。该方法自右向左查找，返回subString在strObj中最后出现的位置，如果没有找到，返回-1。</p>
<p><font color="#006633"><font style="font-size: 16px"><strong>7、在Unicode值和字符串中的字符间转换</strong></font><br />
</font>问题：<br />
<wbr></wbr><wbr></wbr><wbr></wbr>获得一个字符的Unicode编码值，反之亦然。<br />
解决方案：<br />
<wbr></wbr><wbr></wbr><wbr></wbr>要获得字符的Unicode编码，可以使用string.charCodeAt(index)方法，其定义为：<br />
<wbr></wbr><wbr></wbr><wbr></wbr>strObj.charCodeAt(index)<br />
<wbr></wbr><wbr></wbr><wbr></wbr>index为指定字符在strObj对象中的位置（基于0的索引），返回值为0与65535之间的16位整数。例如：<br />
<wbr></wbr><wbr></wbr><wbr></wbr>var strObj = "ABCDEFG";<br />
<wbr></wbr><wbr></wbr><wbr></wbr>var code = strObj.charCodeAt(2); // Unicode value of character 'C' is 67<br />
<wbr></wbr><wbr></wbr><wbr></wbr>如果index指定的索引处没有字符，则返回值为NaN。</p>
<p><wbr></wbr><wbr></wbr><wbr></wbr>要将Unicode编码转换为一个字符，使用String.fromCharCode()方法，注意它是String对象的一个"静态方法"，也就是说在使用前不需要创建字符串实例：<br />
<wbr></wbr><wbr></wbr><wbr></wbr>String.fromCharCode(c1, c2, ...)<br />
<wbr></wbr><wbr></wbr><wbr></wbr>它接受0个或多个整数，返回一个字符串，该字符串包含了各参数指定的字符，例如：<br />
<wbr></wbr><wbr></wbr><wbr></wbr>var str = String.fromCharCode(72, 101, 108, 108, 111); <wbr></wbr>// str == "Hello"<br />
<font style="font-size: 18px" color="#ff0000"><strong>三、Js对数组的操作</strong></font></p>
<p style="text-indent: 2em"><font style="font-size: 16px" color="#006633"><strong>1、数组的创建</strong></font></p>
<p style="text-indent: 2em">var arrayObj = new Array();　//创建一个数组</p>
<p style="text-indent: 2em">var arrayObj = new Array([size]);　//创建一个数组并指定长度，注意不是上限，是长度</p>
<p style="text-indent: 2em">var arrayObj = new Array([element0[, element1[, ...[, elementN]]]]);　创建一个数组并赋值</p>
<p style="text-indent: 2em"><wbr></wbr><wbr></wbr><wbr></wbr>要说明的是，虽然第二种方法创建数组指定了长度，但实际上所有情况下数组都是变长的，也就是说即使指定了长度为5，仍然可以将元素存储在规定长度以外的，注意：这时长度会随之改变。</p>
<p style="text-indent: 2em"><strong><font style="font-size: 16px" color="#006633">2、数组的元素的访问</font></strong></p>
<p style="text-indent: 2em">var testGetArrValue=arrayObj[1]; //获取数组的元素值</p>
<p style="text-indent: 2em">arrayObj[1]= "这是新值"; //给数组元素赋予新的值</p>
<p style="text-indent: 2em"><strong><font style="font-size: 16px" color="#006633">3、数组元素的添加</font></strong></p>
<p style="text-indent: 2em">arrayObj. push([item1 [item2 [. . . [itemN ]]]]);// 将一个或多个新元素添加到数组结尾，并返回数组新长度</p>
<p style="text-indent: 2em">arrayObj.unshift([item1 [item2 [. . . [itemN ]]]]);// 将一个或多个新元素添加到数组开始，数组中的元素自动后移，返回数组新长度</p>
<p style="text-indent: 2em">arrayObj.splice(insertPos,0,[item1[, item2[, . . . [,itemN]]]]);//将一个或多个新元素插入到数组的指定位置，插入位置的元素自动后移，返回""。</p>
<p style="text-indent: 2em"><strong><font style="font-size: 16px" color="#006633">4、数组元素的删除</font></strong></p>
<p style="text-indent: 2em">arrayObj.pop(); //移除最后一个元素并返回该元素值</p>
<p style="text-indent: 2em">arrayObj.shift(); //移除最前一个元素并返回该元素值，数组中元素自动前移</p>
<p style="text-indent: 2em">arrayObj.splice(deletePos,deleteCount); //删除从指定位置deletePos开始的指定数量deleteCount的元素，数组形式返回所移除的元素</p>
<p style="text-indent: 2em"><strong><font style="font-size: 16px" color="#006633">5、数组的截取和合并</font></strong></p>
<p style="text-indent: 2em">arrayObj.slice(start, [end]); //以数组的形式返回数组的一部分，注意不包括 end 对应的元素，如果省略 end 将复制 start 之后的所有元素</p>
<p style="text-indent: 2em">arrayObj.concat([item1[, item2[, . . . [,itemN]]]]); //将多个数组（也可以是字符串，或者是数组和字符串的混合）连接为一个数组，返回连接好的新的数组</p>
<p style="text-indent: 2em"><strong><font style="font-size: 16px" color="#006633">6、数组的拷贝</font></strong></p>
<p style="text-indent: 2em">arrayObj.slice(0); //返回数组的拷贝数组，注意是一个新的数组，不是指向</p>
<p style="text-indent: 2em">arrayObj.concat(); //返回数组的拷贝数组，注意是一个新的数组，不是指向</p>
<p style="text-indent: 2em"><strong><font style="font-size: 16px" color="#006633">7、数组元素的排序</font></strong></p>
<p style="text-indent: 2em">arrayObj.reverse(); //反转元素（最前的排到最后、最后的排到最前），返回数组地址</p>
<p style="text-indent: 2em">arrayObj.sort(); //对数组元素排序，返回数组地址</p>
<p style="text-indent: 2em"><strong><font style="font-size: 16px" color="#006633">8、数组元素的字符串化</font></strong></p>
<p style="text-indent: 2em">arrayObj.join(separator); //返回字符串，这个字符串将数组的每一个元素值连接在一起，中间用 separator 隔开。</p>
<p style="text-indent: 2em">toLocaleString 、toString 、valueOf：可以看作是join的特殊用法，不常用</p>
<p style="text-indent: 2em"><wbr></wbr></p>
<p style="text-indent: 2em"><wbr></wbr></p>
<strong><font style="font-size: 16px" color="#006633">9、length 属性</font></strong>
<p><wbr></wbr></p>
<p style="text-indent: 2em"><wbr></wbr><wbr></wbr><wbr></wbr>Length属性表示数组的长度，即其中元素的个数。因为数组的索引总是由0开始，所以一个数组的上下限分别是：0和length-1。和其他大多数语言不同的是，JavaScript数组的length属性是可变的，这一点需要特别注意。当length属性被设置得更大时，整个数组的状态事实上不会发生变化，仅仅是length属性变大；当length属性被设置得比原来小时，则原先数组中索引大于或等于length的元素的值全部被丢失。下面是演示改变length属性的例子：</p>
<p style="text-indent: 2em">var arr=[12,23,5,3,25,98,76,54,56,76];</p>
<p style="text-indent: 2em">//定义了一个包含10个数字的数组</p>
<p style="text-indent: 2em">alert(arr.length); //显示数组的长度10</p>
<p style="text-indent: 2em">arr.length=12; //增大数组的长度</p>
<p style="text-indent: 2em">alert(arr.length); //显示数组的长度已经变为12</p>
<p style="text-indent: 2em"><wbr></wbr></p>
<p style="text-indent: 2em">alert(arr[8]); //显示第9个元素的值，为56</p>
<p style="text-indent: 2em">arr.length=5; //将数组的长度减少到5，索引等于或超过5的元素被丢弃</p>
<p style="text-indent: 2em">alert(arr[8]); //显示第9个元素已经变为"undefined"</p>
<p style="text-indent: 2em">arr.length=10; //将数组长度恢复为10</p>
<p style="text-indent: 2em">alert(arr[8]); //虽然长度被恢复为10，但第9个元素却无法收回，显示"undefined"</p>
<p style="text-indent: 2em"><wbr></wbr><wbr></wbr><wbr></wbr>由上面的代码我们可以清楚的看到length属性的性质。但length对象不仅可以显式的设置，它也有可能被隐式修改。JavaScript中可以使用一个未声明过的变量，同样，也可以使用一个未定义的数组元素（指索引超过或等于length的元素），这时，length属性的值将被设置为所使用元素索引的值加1。例如下面的代码：</p>
<p style="text-indent: 2em">var arr=[12,23,5,3,25,98,76,54,56,76];</p>
<p style="text-indent: 2em">alert(arr.length);</p>
<p style="text-indent: 2em">arr[15]=34;</p>
<p style="text-indent: 2em">alert(arr.length);</p>
<p style="text-indent: 2em"><wbr></wbr><wbr></wbr><wbr></wbr>代码中同样是先定义了一个包含10个数字的数组，通过alert语句可以看出其长度为10。随后使用了索引为15的元素，将其赋值为15，即arr[15]=34，这时再用alert语句输出数组的长度，得到的是16。无论如何，对于习惯于强类型编程的开发人员来说，这是一个很令人惊讶的特性。事实上，使用new Array()形式创建的数组，其初始长度就是为0，正是对其中未定义元素的操作，才使数组的长度发生变化。</p>
<p style="text-indent: 2em"><wbr></wbr><wbr></wbr><wbr></wbr>由上面的介绍可以看到，length属性是如此的神奇，利用它可以方便的增加或者减少数组的容量。因此对length属性的深入了解，有助于在开发过程中灵活运用。</p>
<p style="text-indent: 2em"><strong><font style="font-size: 16px" color="#006633">10、prototype 属性</font></strong></p>
<p style="text-indent: 2em">返回对象类型原型的引用。prototype 属性是 object 共有的。</p>
<p style="text-indent: 2em">objectName.prototype</p>
<p style="text-indent: 2em">objectName 参数是object对象的名称。</p>
<p style="text-indent: 2em">说明：用 prototype 属性提供对象的类的一组基本功能。对象的新实例&#8220;继承&#8221;赋予该对象原型的操作。</p>
<p style="text-indent: 2em"><wbr></wbr><wbr></wbr><wbr></wbr>对于数组对象，以以下例子说明prototype 属性的用途。</p>
<p style="text-indent: 2em"><wbr></wbr><wbr></wbr><wbr></wbr>给数组对象添加返回数组中最大元素值的方法。要完成这一点，声明一个函数，将它加入 Array.prototype， 并使用它。</p>
<p style="text-indent: 2em">function array_max( )</p>
<p style="text-indent: 2em">{</p>
<p style="text-indent: 2em"><wbr></wbr><wbr></wbr>var i, max = this[0];</p>
<p style="text-indent: 2em"><wbr></wbr><wbr></wbr>for (i = 1; i &lt; this.length; i++)</p>
<p style="text-indent: 2em"><wbr></wbr><wbr></wbr>{</p>
<p style="text-indent: 2em"><wbr></wbr><wbr></wbr>if (max &lt; this[i])</p>
<p style="text-indent: 2em"><wbr></wbr><wbr></wbr>max = this[i];</p>
<p style="text-indent: 2em"><wbr></wbr><wbr></wbr>}</p>
<p style="text-indent: 2em"><wbr></wbr><wbr></wbr>return max;</p>
<p style="text-indent: 2em">}</p>
<p style="text-indent: 2em">Array.prototype.max = array_max;</p>
<p style="text-indent: 2em">var x = new Array(1, 2, 3, 4, 5, 6);</p>
<p style="text-indent: 2em">var y = x.max( );</p>
<p style="text-indent: 2em">该代码执行后，y 保存数组 x 中的最大值，或说 6</p>
</div>
<img src ="http://www.blogjava.net/hefang/aggbug/324474.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hefang/" target="_blank">何方</a> 2010-06-25 17:26 <a href="http://www.blogjava.net/hefang/articles/324474.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>