mod highline
diff --git a/2015/05/29/javascript-note-01/index.html b/2015/05/29/javascript-note-01/index.html
index 46dba23..0a459f1 100644
--- a/2015/05/29/javascript-note-01/index.html
+++ b/2015/05/29/javascript-note-01/index.html
@@ -218,37 +218,37 @@
<h3 id="什么是数组">什么是数组</h3><p>通常数组是一种线性结构,但是JavaScript中的数组是一个<strong>特殊的对象</strong>,其索引值在内部被转换成字符串处理。</p>
-<h3 id="创建数组">创建数组</h3><figure class="highlight smali"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">var<span class="instruction"> array </span>= <span class="keyword">[</span>]; //length = 0</span><br><span class="line">var<span class="instruction"> array </span>= <span class="keyword">[</span>10]; //length = 1</span><br><span class="line">var<span class="instruction"> array </span>= <span class="keyword">[</span>1,2,3,4,5];//length = 5</span><br><span class="line">var<span class="instruction"> array </span>=<span class="instruction"> new </span>Array(<span class="function">)</span>; //length = 0</span><br><span class="line">var<span class="instruction"> array </span>=<span class="instruction"> new </span>Array(10<span class="function">)</span>; //length = 10</span><br><span class="line">var<span class="instruction"> array </span>=<span class="instruction"> new </span>Array(1,2,3,4,6<span class="function">)</span>; //length = 5</span><br></pre></td></tr></table></figure>
+<h3 id="创建数组">创建数组</h3><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> array = []; <span class="comment">//length = 0</span></span><br><span class="line"><span class="keyword">var</span> array = [<span class="number">10</span>]; <span class="comment">//length = 1</span></span><br><span class="line"><span class="keyword">var</span> array = [<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">5</span>];<span class="comment">//length = 5</span></span><br><span class="line"><span class="keyword">var</span> array = <span class="keyword">new</span> <span class="built_in">Array</span>(); <span class="comment">//length = 0</span></span><br><span class="line"><span class="keyword">var</span> array = <span class="keyword">new</span> <span class="built_in">Array</span>(<span class="number">10</span>); <span class="comment">//length = 10</span></span><br><span class="line"><span class="keyword">var</span> array = <span class="keyword">new</span> <span class="built_in">Array</span>(<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">6</span>); <span class="comment">//length = 5</span></span><br></pre></td></tr></table></figure>
<p><em>使用[]创建数组的效率高,因为字符少。</em></p>
<a id="more"></a>
-<h3 id="遍历数组">遍历数组</h3><figure class="highlight matlab"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">var nums = <span class="matrix">[<span class="number">1</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">5</span>,<span class="number">6</span>]</span>;</span><br><span class="line"><span class="keyword">for</span>(var <span class="built_in">i</span> = <span class="number">0</span>; <span class="built_in">i</span> < nums.<span class="built_in">length</span>; ++<span class="built_in">i</span>)<span class="cell">{</span><br><span class="line"> console.log(nums[i]); //<span class="number">1</span> <span class="number">23</span> <span class="number">4</span> <span class="number">5</span> <span class="number">6</span></span><br><span class="line">}</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span>(var <span class="built_in">i</span> = <span class="number">0</span>; <span class="built_in">i</span> < nums.<span class="built_in">length</span>; ++<span class="built_in">i</span>)<span class="cell">{</span><br><span class="line"> nums[i] = i;</span><br><span class="line">}</span></span><br></pre></td></tr></table></figure>
+<h3 id="遍历数组">遍历数组</h3><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> nums = [<span class="number">1</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">5</span>,<span class="number">6</span>];</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">var</span> i = <span class="number">0</span>; i < nums.length; ++i){</span><br><span class="line"> <span class="built_in">console</span>.log(nums[i]); <span class="comment">//1 23 4 5 6</span></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">var</span> i = <span class="number">0</span>; i < nums.length; ++i){</span><br><span class="line"> nums[i] = i;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>length属性反映的是当前数组中元素的个数,使用它,可以确保循环遍历了数组中的所有元素。</p>
-<h3 id="字符串生成数组">字符串生成数组</h3><figure class="highlight applescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">var sentence = <span class="string">"the quick brown fox jumped over the lazy dog"</span>;</span><br><span class="line">var <span class="property">words</span> = sentence.split(<span class="string">" "</span>);</span><br><span class="line"><span class="keyword">for</span> (var i = <span class="number">0</span>; i < <span class="property">words</span>.<span class="property">length</span>; ++i) </span><br><span class="line"> console.<span class="command">log</span>(<span class="string">"word "</span> + i + <span class="string">": "</span> + <span class="property">words</span>[i]);</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
-<h3 id="数组的类方法">数组的类方法</h3><figure class="highlight cs"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">bool</span> = Array.isArray(<span class="keyword">var</span>);<span class="comment">//检查变量是否为数组</span></span><br></pre></td></tr></table></figure>
-<h3 id="数组的属性">数组的属性</h3><p><strong>获取长度</strong><br><figure class="highlight delphi"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> nums = [<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">5</span>];</span><br><span class="line">length = <span class="keyword">array</span>.length;<span class="comment">//length = 5</span></span><br></pre></td></tr></table></figure></p>
-<h3 id="数组的对象方法">数组的对象方法</h3><p><strong>查找元素</strong><br><figure class="highlight fortran"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">/*</span><br><span class="line"><span class="built_in">index</span>:</span><br><span class="line">查找到返回下标</span><br><span class="line">查找失败返回-<span class="number">1</span></span><br><span class="line">*/</span><br><span class="line"><span class="built_in">index</span> = array.indexOf(<span class="keyword">value</span>);//从前往后找元素<span class="keyword">value</span>,找到<span class="number">1</span>个就返回</span><br><span class="line"><span class="built_in">index</span> = array.lastIndexOf(<span class="keyword">value</span>);// 从后往前找元素<span class="keyword">value</span>,找到<span class="number">1</span>个就返回</span><br></pre></td></tr></table></figure></p>
-<p><strong>数组转字符串</strong><br><figure class="highlight lasso"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">string</span> <span class="subst">=</span> <span class="built_in">array</span><span class="built_in">.</span><span class="keyword">join</span>(); <span class="comment">//1,2,3,4,5</span></span><br><span class="line"><span class="built_in">string</span> <span class="subst">=</span> <span class="built_in">array</span><span class="built_in">.</span>toString(); <span class="comment">//1,2,3,4,5</span></span><br><span class="line"><span class="built_in">string</span> <span class="subst">=</span> <span class="built_in">array</span><span class="built_in">.</span><span class="keyword">join</span>(<span class="string">'-'</span>);<span class="comment">//1-2-3-4</span></span><br></pre></td></tr></table></figure></p>
-<p><strong>拼接数组</strong><br><figure class="highlight kotlin"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="variable"><span class="keyword">var</span> a</span> = [<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>];</span><br><span class="line"><span class="variable"><span class="keyword">var</span> b</span> = [<span class="number">4</span>,<span class="number">5</span>,<span class="number">6</span>];</span><br><span class="line"></span><br><span class="line"><span class="variable"><span class="keyword">var</span> c</span> = a.concat(b);</span><br><span class="line"><span class="comment">//c = [ 1, 2, 3, 4, 5, 6 ]</span></span><br><span class="line"><span class="variable"><span class="keyword">var</span> c</span> = b.concat(a);</span><br><span class="line"><span class="comment">//c = [ 4, 5, 6, 1, 2, 3 ]</span></span><br></pre></td></tr></table></figure></p>
-<p><strong>添加元素</strong><br>push和unshift都返回数组的新长度.<br><figure class="highlight smali"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">//push方法在数组的尾部添加元素</span><br><span class="line">//unshift方法在数组的头部添加元素</span><br><span class="line">var<span class="instruction"> array </span>= <span class="keyword">[</span>1,2,3];</span><br><span class="line">array.push(4<span class="function">)</span>;//<span class="keyword">[</span>1,2,3,4] rtn = length = 4</span><br><span class="line">array.unshift(0<span class="function">)</span>;//<span class="keyword">[</span>0,1,2,3,4] rtn = length = 5</span><br></pre></td></tr></table></figure></p>
-<p><strong>删除元素</strong><br>pop和shift都返回被删除元素组成的数组<br><figure class="highlight smali"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">//pop方法在数组的尾部删除元素</span><br><span class="line">//shift方法在数组的头部删除元素</span><br><span class="line">var<span class="instruction"> array </span>= <span class="keyword">[</span>0,1,2,3,4];</span><br><span class="line">array.pop(<span class="function">)</span>;//<span class="keyword">[</span>0,1,2,3] rtn = 4</span><br><span class="line">array.shift(<span class="function">)</span>;//<span class="keyword">[</span>1,2,3] rtn= 0</span><br></pre></td></tr></table></figure></p>
+<h3 id="字符串生成数组">字符串生成数组</h3><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> sentence = <span class="string">"the quick brown fox jumped over the lazy dog"</span>;</span><br><span class="line"><span class="keyword">var</span> words = sentence.split(<span class="string">" "</span>);</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">var</span> i = <span class="number">0</span>; i < words.length; ++i) </span><br><span class="line"> <span class="built_in">console</span>.log(<span class="string">"word "</span> + i + <span class="string">": "</span> + words[i]);</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
+<h3 id="数组的类方法">数组的类方法</h3><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bool = <span class="built_in">Array</span>.isArray(<span class="keyword">var</span>);<span class="comment">//检查变量是否为数组</span></span><br></pre></td></tr></table></figure>
+<h3 id="数组的属性">数组的属性</h3><p><strong>获取长度</strong><br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> nums = [<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">5</span>];</span><br><span class="line">length = array.length;<span class="comment">//length = 5</span></span><br></pre></td></tr></table></figure></p>
+<h3 id="数组的对象方法">数组的对象方法</h3><p><strong>查找元素</strong><br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/*</span><br><span class="line">index:</span><br><span class="line">查找到返回下标</span><br><span class="line">查找失败返回-1</span><br><span class="line">*/</span></span><br><span class="line">index = array.indexOf(value);<span class="comment">//从前往后找元素value,找到1个就返回</span></span><br><span class="line">index = array.lastIndexOf(value);<span class="comment">// 从后往前找元素value,找到1个就返回</span></span><br></pre></td></tr></table></figure></p>
+<p><strong>数组转字符串</strong><br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">string = array.join(); <span class="comment">//1,2,3,4,5</span></span><br><span class="line">string = array.toString(); <span class="comment">//1,2,3,4,5</span></span><br><span class="line">string = array.join(<span class="string">'-'</span>);<span class="comment">//1-2-3-4</span></span><br></pre></td></tr></table></figure></p>
+<p><strong>拼接数组</strong><br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> a = [<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>];</span><br><span class="line"><span class="keyword">var</span> b = [<span class="number">4</span>,<span class="number">5</span>,<span class="number">6</span>];</span><br><span class="line"></span><br><span class="line"><span class="keyword">var</span> c = a.concat(b);</span><br><span class="line"><span class="comment">//c = [ 1, 2, 3, 4, 5, 6 ]</span></span><br><span class="line"><span class="keyword">var</span> c = b.concat(a);</span><br><span class="line"><span class="comment">//c = [ 4, 5, 6, 1, 2, 3 ]</span></span><br></pre></td></tr></table></figure></p>
+<p><strong>添加元素</strong><br>push和unshift都返回数组的新长度.<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//push方法在数组的尾部添加元素</span></span><br><span class="line"><span class="comment">//unshift方法在数组的头部添加元素</span></span><br><span class="line"><span class="keyword">var</span> array = [<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>];</span><br><span class="line">array.push(<span class="number">4</span>);<span class="comment">//[1,2,3,4] rtn = length = 4</span></span><br><span class="line">array.unshift(<span class="number">0</span>);<span class="comment">//[0,1,2,3,4] rtn = length = 5</span></span><br></pre></td></tr></table></figure></p>
+<p><strong>删除元素</strong><br>pop和shift都返回被删除元素组成的数组<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//pop方法在数组的尾部删除元素</span></span><br><span class="line"><span class="comment">//shift方法在数组的头部删除元素</span></span><br><span class="line"><span class="keyword">var</span> array = [<span class="number">0</span>,<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>];</span><br><span class="line">array.pop();<span class="comment">//[0,1,2,3] rtn = 4</span></span><br><span class="line">array.shift();<span class="comment">//[1,2,3] rtn= 0</span></span><br></pre></td></tr></table></figure></p>
<p><strong>splice操作</strong><br>被删除元素数组 = splice(起始位置, 删除字符数, 插入的字符…)</p>
<ul>
<li>起始索引(也就是你希望开始添加元素的地方) ;</li>
<li>需要删除的元素个数(添加元素时该参数设为 0) ;</li>
<li>想要添加进数组的元素。</li>
</ul>
-<p>先<strong>删除</strong>元素,再<strong>增加</strong>元素.<br><figure class="highlight inform7"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">var nums = <span class="comment">[1,2,3,4,5]</span>;</span><br><span class="line">nums.splice(2,0);//rtn = <span class="comment">[]</span> nums = <span class="comment">[ 1, 2, 3, 4, 5 ]</span></span><br><span class="line">nums.splice(2,1);//rtn =<span class="comment">[ 3 ]</span> nums = <span class="comment">[ 1, 2, 4, 5 ]</span></span><br><span class="line">nums.splice(2,2);//rtn = <span class="comment">[ 4, 5 ]</span> nums = <span class="comment">[ 1, 2 ]</span></span><br><span class="line">nums.splice(2,0,10,20,30);//rtn = <span class="comment">[]</span> nums = <span class="comment">[ 1, 2, 10, 20, 30 ]</span></span><br><span class="line">nums.splice(1,1,40);//rtn = <span class="comment">[ 2 ]</span> nums = <span class="comment">[ 1, 40, 10, 20, 30 ]</span></span><br></pre></td></tr></table></figure></p>
-<p><strong>数组排序</strong><br>reverse方法是将数组反转<br><figure class="highlight smali"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">var<span class="instruction"> array </span>= <span class="keyword">[</span>1,2,3,4,5];</span><br><span class="line">array.reverse(<span class="function">)</span>;//rtn =<span class="instruction"> array </span>= <span class="keyword">[</span> 5, 4, 3, 2, 1 ];</span><br></pre></td></tr></table></figure></p>
-<p>sort方法默认是按照字典顺序进行排序<br>适用于字符串排序,对于数字排序不适用.<br><em>数组本身被改变</em><br>Array = sort([function compare]);<br><figure class="highlight actionscript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> words = [<span class="string">'one'</span>,<span class="string">'two'</span>,<span class="string">'three'</span>,<span class="string">'four'</span>];</span><br><span class="line">words.sort();<span class="comment">//[ 'four', 'one', 'three', 'two' ]</span></span><br><span class="line"><span class="keyword">var</span> nums = [<span class="number">4</span>,<span class="number">5</span>,<span class="number">2</span>,<span class="number">20</span>,<span class="number">11</span>,<span class="number">1</span>,<span class="number">10</span>,<span class="number">11</span>,<span class="number">23</span>,<span class="number">42</span>];</span><br><span class="line">nums.sort();<span class="comment">//[ 1, 10, 11, 11, 2, 20, 23, 4, 42, 5 ]</span></span><br><span class="line">nums.sort(<span class="function"><span class="keyword">function</span><span class="params">(a,b)</span></span>{<span class="keyword">return</span> a-b; });<span class="comment">//[ 1, 2, 4, 5, 10, 11, 11, 20, 23, 42 ]</span></span><br><span class="line">nums.sort(<span class="function"><span class="keyword">function</span><span class="params">(a,b)</span></span>{<span class="keyword">return</span> b-a; });<span class="comment">//[ 42, 23, 20, 11, 11, 10, 5, 4, 2, 1 ]</span></span><br></pre></td></tr></table></figure></p>
-<h3 id="迭代器">迭代器</h3><p>forEach() 该方法接受一个函数作为参数,对数组中的每个元素使用该函数.<br><figure class="highlight openscad"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">square</span><span class="params">(num)</span>{</span></span><br><span class="line"> console.<span class="built_in">log</span><span class="params">(num, num* num)</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">var nums = [<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">5</span>];</span><br><span class="line">nums.forEach<span class="params">(square)</span>;</span><br></pre></td></tr></table></figure></p>
+<p>先<strong>删除</strong>元素,再<strong>增加</strong>元素.<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> nums = [<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">5</span>];</span><br><span class="line">nums.splice(<span class="number">2</span>,<span class="number">0</span>);<span class="comment">//rtn = [] nums = [ 1, 2, 3, 4, 5 ]</span></span><br><span class="line">nums.splice(<span class="number">2</span>,<span class="number">1</span>);<span class="comment">//rtn =[ 3 ] nums = [ 1, 2, 4, 5 ]</span></span><br><span class="line">nums.splice(<span class="number">2</span>,<span class="number">2</span>);<span class="comment">//rtn = [ 4, 5 ] nums = [ 1, 2 ]</span></span><br><span class="line">nums.splice(<span class="number">2</span>,<span class="number">0</span>,<span class="number">10</span>,<span class="number">20</span>,<span class="number">30</span>);<span class="comment">//rtn = [] nums = [ 1, 2, 10, 20, 30 ]</span></span><br><span class="line">nums.splice(<span class="number">1</span>,<span class="number">1</span>,<span class="number">40</span>);<span class="comment">//rtn = [ 2 ] nums = [ 1, 40, 10, 20, 30 ]</span></span><br></pre></td></tr></table></figure></p>
+<p><strong>数组排序</strong><br>reverse方法是将数组反转<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> array = [<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">5</span>];</span><br><span class="line">array.reverse();<span class="comment">//rtn = array = [ 5, 4, 3, 2, 1 ];</span></span><br></pre></td></tr></table></figure></p>
+<p>sort方法默认是按照字典顺序进行排序<br>适用于字符串排序,对于数字排序不适用.<br><em>数组本身被改变</em><br>Array = sort([function compare]);<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> words = [<span class="string">'one'</span>,<span class="string">'two'</span>,<span class="string">'three'</span>,<span class="string">'four'</span>];</span><br><span class="line">words.sort();<span class="comment">//[ 'four', 'one', 'three', 'two' ]</span></span><br><span class="line"><span class="keyword">var</span> nums = [<span class="number">4</span>,<span class="number">5</span>,<span class="number">2</span>,<span class="number">20</span>,<span class="number">11</span>,<span class="number">1</span>,<span class="number">10</span>,<span class="number">11</span>,<span class="number">23</span>,<span class="number">42</span>];</span><br><span class="line">nums.sort();<span class="comment">//[ 1, 10, 11, 11, 2, 20, 23, 4, 42, 5 ]</span></span><br><span class="line">nums.sort(<span class="function"><span class="keyword">function</span>(<span class="params">a,b</span>)</span>{<span class="keyword">return</span> a-b; });<span class="comment">//[ 1, 2, 4, 5, 10, 11, 11, 20, 23, 42 ]</span></span><br><span class="line">nums.sort(<span class="function"><span class="keyword">function</span>(<span class="params">a,b</span>)</span>{<span class="keyword">return</span> b-a; });<span class="comment">//[ 42, 23, 20, 11, 11, 10, 5, 4, 2, 1 ]</span></span><br></pre></td></tr></table></figure></p>
+<h3 id="迭代器">迭代器</h3><p>forEach() 该方法接受一个函数作为参数,对数组中的每个元素使用该函数.<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">square</span>(<span class="params">num</span>)</span>{</span><br><span class="line"> <span class="built_in">console</span>.log(num, num* num);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">var</span> nums = [<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">5</span>];</span><br><span class="line">nums.forEach(square);</span><br></pre></td></tr></table></figure></p>
<p>every(), 该方法接受一个返回值为布尔类型的函数, 对数组中的每个元素使用该函数。 如果对于所有的元素, 该函数均返回 true, 则该方法返回 true。<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> nums = [<span class="number">2</span>,<span class="number">4</span>,<span class="number">6</span>,<span class="number">8</span>,<span class="number">10</span>];</span><br><span class="line"><span class="keyword">var</span> rtn = nums.every(<span class="function"><span class="keyword">function</span>(<span class="params">num</span>)</span>{</span><br><span class="line"> <span class="keyword">return</span> num%<span class="number">2</span>==<span class="number">0</span>;</span><br><span class="line">});</span><br><span class="line"><span class="built_in">console</span>.log(rtn); <span class="comment">// true</span></span><br></pre></td></tr></table></figure></p>
<p>some() 方法也接受一个返回值为布尔类型的函数, 只要有一个元素使得该函数返回 true,该方法就返回 true。<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> nums = [<span class="number">2</span>,<span class="number">3</span>,<span class="number">5</span>,<span class="number">7</span>,<span class="number">9</span>];</span><br><span class="line"><span class="keyword">var</span> rtn = nums.some(<span class="function"><span class="keyword">function</span>(<span class="params">num</span>)</span>{</span><br><span class="line"> <span class="keyword">return</span> num%<span class="number">2</span>==<span class="number">0</span>;</span><br><span class="line">});</span><br><span class="line"><span class="built_in">console</span>.log(rtn); <span class="comment">// true</span></span><br></pre></td></tr></table></figure></p>
-<p>reduce() 方法接受一个函数, 返回一个值。 该方法会从一个累加值开始, 不断对累加值和<br>数组中的后续元素调用该函数, 直到数组中的最后一个元素, 最后返回得到的累加值。<br>计算数组中元素的平方和.<br><figure class="highlight stata"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> nums = [1,2,3,4];</span><br><span class="line"><span class="keyword">var</span> <span class="keyword">sum</span> = nums.reduce(function(<span class="keyword">sum</span>,num){</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">sum</span> + num*num;</span><br><span class="line">});</span><br><span class="line">console.<span class="literal">log</span>(<span class="keyword">sum</span>);<span class="comment">//30 1*1 + 2*2 + 3*3 + 4*4 =30</span></span><br></pre></td></tr></table></figure></p>
+<p>reduce() 方法接受一个函数, 返回一个值。 该方法会从一个累加值开始, 不断对累加值和<br>数组中的后续元素调用该函数, 直到数组中的最后一个元素, 最后返回得到的累加值。<br>计算数组中元素的平方和.<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> nums = [<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>];</span><br><span class="line"><span class="keyword">var</span> sum = nums.reduce(<span class="function"><span class="keyword">function</span>(<span class="params">sum,num</span>)</span>{</span><br><span class="line"> <span class="keyword">return</span> sum + num*num;</span><br><span class="line">});</span><br><span class="line"><span class="built_in">console</span>.log(sum);<span class="comment">//30 1*1 + 2*2 + 3*3 + 4*4 =30</span></span><br></pre></td></tr></table></figure></p>
<p>reduceRight() 方法, 和 reduce() 方法不同, 它是从右到左执行。<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">concat</span>(<span class="params">accumulatedString, item</span>) </span>{</span><br><span class="line"> <span class="keyword">return</span> accumulatedString + item;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">var</span> words = [<span class="string">" the "</span> , <span class="string">" quick "</span> , <span class="string">" brown "</span> , <span class="string">" fox "</span> ] ;</span><br><span class="line"><span class="keyword">var</span> sentence = words. reduceRight(concat);</span><br><span class="line"><span class="built_in">console</span>.log(sentence); <span class="comment">// 显示 " fox brown quick the"</span></span><br></pre></td></tr></table></figure></p>
<p>map() 和 forEach() 有点儿像, 对数组中的每个元素使用某个函数。 两者的区别是 map() 返回一个新的数组, 该数组的元素是对原有元素应用某个函数得到的结果。<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">square</span>(<span class="params">num</span>)</span>{</span><br><span class="line"> <span class="keyword">return</span> num* num;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">var</span> nums = [<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">5</span>];</span><br><span class="line"><span class="keyword">var</span> news = nums.map(square); <span class="comment">//rtn = [ 1, 4, 9, 16, 25 ]</span></span><br><span class="line"><span class="built_in">console</span>.log(nums);<span class="comment">//[ 1, 2, 3, 4, 5 ]</span></span><br><span class="line"><span class="built_in">console</span>.log(news);<span class="comment">//[ 1, 4, 9, 16, 25 ]</span></span><br></pre></td></tr></table></figure></p>
<p>给定一个字符串生成首字母缩写形式<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> str = <span class="string">'Asynchronous Javascript And XML'</span>;</span><br><span class="line"><span class="keyword">var</span> arr = str.split(<span class="string">" "</span>);</span><br><span class="line"><span class="keyword">var</span> newArr = arr.map(<span class="function"><span class="keyword">function</span>(<span class="params">word</span>)</span>{<span class="keyword">return</span> word.charAt(<span class="number">0</span>);});</span><br><span class="line"><span class="keyword">var</span> newStr = newArr.join(<span class="string">""</span>);</span><br><span class="line"><span class="built_in">console</span>.log(str + <span class="string">'->'</span> + newStr); <span class="comment">// Asynchronous Javascript And XML->AJAX</span></span><br></pre></td></tr></table></figure></p>
<p>filter() 和 every() 类似, 传入一个返回值为布尔类型的函数。 和 every() 方法不同的是,当对数组中的所有元素应用该函数, 结果均为 true 时, 该方法并不返回 true, 而是返回一个新数组, 该数组包含应用该函数后结果为 true 的元素。<br>随机生成20个数字,取出大于60的数字.<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> nums = [];</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">var</span> i=<span class="number">0</span>;i<<span class="number">20</span>;i++){</span><br><span class="line"> nums[i] = <span class="built_in">Math</span>.floor(<span class="built_in">Math</span>.random()*<span class="number">101</span>);</span><br><span class="line">}</span><br><span class="line"><span class="keyword">var</span> bigNums = nums.filter(<span class="function"><span class="keyword">function</span>(<span class="params">num</span>)</span>{<span class="keyword">return</span> num >= <span class="number">60</span>;});</span><br><span class="line"><span class="built_in">console</span>.log(nums);<span class="comment">//[ 46, 56, 53, 65, 49, 3, 25, 26, 46, 25, 36, 73, 44, 43, 58, 97, 100, 65, 97, 47 ]</span></span><br><span class="line"><span class="built_in">console</span>.log(bigNums);<span class="comment">//[ 65, 73, 97, 100, 65, 97 ]</span></span><br></pre></td></tr></table></figure></p>
-<figure class="highlight coffeescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="reserved">var</span> words = [<span class="string">"recieve"</span> , <span class="string">" deceive"</span> , <span class="string">"percieve"</span> , <span class="string">"deceit"</span> , <span class="string">"concieve"</span> ] ;</span><br><span class="line"><span class="reserved">var</span> filter = <span class="string">'cie'</span>;</span><br><span class="line"><span class="reserved">var</span> misspelled = words.filter(<span class="reserved">function</span>(word){</span><br><span class="line"> <span class="keyword">if</span>(word.indexOf(filter)>-<span class="number">1</span>){</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line"> }<span class="keyword">else</span>{</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line"> }</span><br><span class="line">});</span><br><span class="line"><span class="built_in">console</span>.log(misspelled );<span class="regexp">//</span>[ <span class="string">'recieve'</span>, <span class="string">'percieve'</span>, <span class="string">'concieve'</span> ]</span><br></pre></td></tr></table></figure>
+<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> words = [<span class="string">"recieve"</span> , <span class="string">" deceive"</span> , <span class="string">"percieve"</span> , <span class="string">"deceit"</span> , <span class="string">"concieve"</span> ] ;</span><br><span class="line"><span class="keyword">var</span> filter = <span class="string">'cie'</span>;</span><br><span class="line"><span class="keyword">var</span> misspelled = words.filter(<span class="function"><span class="keyword">function</span>(<span class="params">word</span>)</span>{</span><br><span class="line"> <span class="keyword">if</span>(word.indexOf(filter)>-<span class="number">1</span>){</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line"> }<span class="keyword">else</span>{</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line"> }</span><br><span class="line">});</span><br><span class="line"><span class="built_in">console</span>.log(misspelled );<span class="comment">//[ 'recieve', 'percieve', 'concieve' ]</span></span><br></pre></td></tr></table></figure>
</div>
@@ -265,14 +265,12 @@
<div class="post-nav">
<div class="post-nav-prev post-nav-item">
- <a href="/2015/06/06/coredump-01/">使用gdb解析core dump-概念篇</a>
+ <a href="/2015/05/29/javascript-note-02/">JavaScript学习笔记-数组2</a>
</div>
<div class="post-nav-next post-nav-item">
- <a href="/2015/05/29/javascript-note-03/">JavaScript学习笔记-数组练习题</a>
-
</div>
</div>
@@ -381,6 +379,10 @@
+ <div class="links-of-author motion-element">
+
+ </div>
+
</div>
diff --git a/2015/05/29/javascript-note-02/index.html b/2015/05/29/javascript-note-02/index.html
index 5564781..cb76b06 100644
--- a/2015/05/29/javascript-note-02/index.html
+++ b/2015/05/29/javascript-note-02/index.html
@@ -218,9 +218,9 @@
<h3 id="二维数组">二维数组</h3><p>JavaScript只支持一维数组,但是通过在数组里保存数组元素的方式,可以轻松创建多维<br>数组。</p>
-<h3 id="创建二维数组">创建二维数组</h3><figure class="highlight inform7"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">var twod = <span class="comment">[]</span>;</span><br><span class="line">var rows = 5;</span><br><span class="line">for (var i = 0; i < rows; ++i) {</span><br><span class="line"> twod<span class="comment">[i]</span> = <span class="comment">[]</span>;</span><br><span class="line">}</span><br><span class="line">console.log(twod);//<span class="comment">[ <span class="comment">[]</span>, <span class="comment">[]</span>, <span class="comment">[]</span>, <span class="comment">[]</span>, <span class="comment">[]</span> ]</span></span><br></pre></td></tr></table></figure>
+<h3 id="创建二维数组">创建二维数组</h3><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> twod = [];</span><br><span class="line"><span class="keyword">var</span> rows = <span class="number">5</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">var</span> i = <span class="number">0</span>; i < rows; ++i) {</span><br><span class="line"> twod[i] = [];</span><br><span class="line">}</span><br><span class="line"><span class="built_in">console</span>.log(twod);<span class="comment">//[ [], [], [], [], [] ]</span></span><br></pre></td></tr></table></figure>
<a id="more"></a>
-<p>为数组类添加方法matrix(行数,列数,初始值),用于创建二维数组并初始化.<br><figure class="highlight cal"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">Array.matrix = function(rows,cols,initial){</span><br><span class="line"> <span class="keyword">var</span> arr = [];</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">var</span> i = <span class="number">0</span>; i < rows; i++){</span><br><span class="line"> <span class="keyword">var</span> col = [];</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">var</span> j = <span class="number">0</span>; j < cols; j++){</span><br><span class="line"> col[j] = initial;</span><br><span class="line"> }</span><br><span class="line"> arr[i] = col;</span><br><span class="line"> }</span><br><span class="line"> return arr;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">var</span> nums = Array.matrix(<span class="number">5</span>,<span class="number">5</span>,<span class="number">0</span>);</span><br><span class="line">console.log(nums[<span class="number">1</span>][<span class="number">1</span>]); // <span class="number">0</span></span><br><span class="line"><span class="keyword">var</span> strs = Array.matrix(<span class="number">5</span>,<span class="number">5</span>,<span class="variable">""</span>);</span><br><span class="line">strs[<span class="number">1</span>][<span class="number">2</span>] = <span class="variable">"iDarker"</span>;</span><br><span class="line">console.log(strs);</span><br><span class="line"> /* [ [ <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span> ],</span><br><span class="line"> [ <span class="string">''</span>, <span class="string">''</span>, <span class="string">'iDarker'</span>, <span class="string">''</span>, <span class="string">''</span></span><br><span class="line"> [ <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span> ],</span><br><span class="line"> [ <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span> ],</span><br><span class="line"> [ <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span> ] ]</span><br><span class="line">*/</span><br></pre></td></tr></table></figure></p>
+<p>为数组类添加方法matrix(行数,列数,初始值),用于创建二维数组并初始化.<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">Array</span>.matrix = <span class="function"><span class="keyword">function</span>(<span class="params">rows,cols,initial</span>)</span>{</span><br><span class="line"> <span class="keyword">var</span> arr = [];</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">var</span> i = <span class="number">0</span>; i < rows; i++){</span><br><span class="line"> <span class="keyword">var</span> col = [];</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">var</span> j = <span class="number">0</span>; j < cols; j++){</span><br><span class="line"> col[j] = initial;</span><br><span class="line"> }</span><br><span class="line"> arr[i] = col;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> arr;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">var</span> nums = <span class="built_in">Array</span>.matrix(<span class="number">5</span>,<span class="number">5</span>,<span class="number">0</span>);</span><br><span class="line"><span class="built_in">console</span>.log(nums[<span class="number">1</span>][<span class="number">1</span>]); <span class="comment">// 0</span></span><br><span class="line"><span class="keyword">var</span> strs = <span class="built_in">Array</span>.matrix(<span class="number">5</span>,<span class="number">5</span>,<span class="string">""</span>);</span><br><span class="line">strs[<span class="number">1</span>][<span class="number">2</span>] = <span class="string">"iDarker"</span>;</span><br><span class="line"><span class="built_in">console</span>.log(strs);</span><br><span class="line"> <span class="comment">/* [ [ '', '', '', '', '' ],</span><br><span class="line"> [ '', '', 'iDarker', '', ''</span><br><span class="line"> [ '', '', '', '', '' ],</span><br><span class="line"> [ '', '', '', '', '' ],</span><br><span class="line"> [ '', '', '', '', '' ] ]</span><br><span class="line">*/</span></span><br></pre></td></tr></table></figure></p>
<h3 id="对象数组">对象数组</h3><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">Point</span>(<span class="params">x,y</span>)</span>{</span><br><span class="line"> <span class="keyword">this</span>.x = x;</span><br><span class="line"> <span class="keyword">this</span>.y = y;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">var</span> p1 = <span class="keyword">new</span> Point(<span class="number">1</span>,<span class="number">1</span>);</span><br><span class="line"><span class="keyword">var</span> p2 = <span class="keyword">new</span> Point(<span class="number">2</span>,<span class="number">2</span>);</span><br><span class="line"><span class="keyword">var</span> p3 = <span class="keyword">new</span> Point(<span class="number">3</span>,<span class="number">3</span>);</span><br><span class="line"><span class="keyword">var</span> p4 = <span class="keyword">new</span> Point(<span class="number">4</span>,<span class="number">4</span>);</span><br><span class="line"><span class="keyword">var</span> points = [p1,p2,p3,p4];</span><br><span class="line">points.forEach(<span class="function"><span class="keyword">function</span>(<span class="params">point</span>)</span>{</span><br><span class="line"> <span class="built_in">console</span>.log(<span class="string">'Point x:'</span> + point.x + <span class="string">' y:'</span> + point.y);</span><br><span class="line">});</span><br><span class="line"><span class="comment">/*</span><br><span class="line">Point x:1 y:1</span><br><span class="line">Point x:2 y:2</span><br><span class="line">Point x:3 y:3</span><br><span class="line">Point x:4 y:4</span><br><span class="line">*/</span></span><br><span class="line"><span class="keyword">var</span> p5 = <span class="keyword">new</span> Point(<span class="number">5</span>,<span class="number">5</span>);</span><br><span class="line">points.push(p5);</span><br><span class="line"><span class="built_in">console</span>.log(points);</span><br><span class="line"><span class="comment">/*</span><br><span class="line">[ { x: 1, y: 1 },</span><br><span class="line"> { x: 2, y: 2 },</span><br><span class="line"> { x: 3, y: 3 },</span><br><span class="line"> { x: 4, y: 4 },</span><br><span class="line"> { x: 5, y: 5 } ]</span><br><span class="line">*/</span></span><br><span class="line">points.pop();</span><br><span class="line"><span class="built_in">console</span>.log(points);</span><br><span class="line"><span class="comment">/*</span><br><span class="line">[ { x: 1, y: 1 },</span><br><span class="line"> { x: 2, y: 2 },</span><br><span class="line"> { x: 3, y: 3 },</span><br><span class="line"> { x: 4, y: 4 } ]</span><br><span class="line">*/</span></span><br><span class="line">points.unshift(p5);</span><br><span class="line"><span class="built_in">console</span>.log(points);</span><br><span class="line"><span class="comment">/*</span><br><span class="line">[ { x: 5, y: 5 },</span><br><span class="line"> { x: 1, y: 1 },</span><br><span class="line"> { x: 2, y: 2 },</span><br><span class="line"> { x: 3, y: 3 },</span><br><span class="line"> { x: 4, y: 4 } ]</span><br><span class="line">*/</span></span><br><span class="line">points.shift();</span><br><span class="line"><span class="built_in">console</span>.log(points);</span><br><span class="line"><span class="comment">/*</span><br><span class="line">[ { x: 1, y: 1 },</span><br><span class="line"> { x: 2, y: 2 },</span><br><span class="line"> { x: 3, y: 3 },</span><br><span class="line"> { x: 4, y: 4 } ]</span><br><span class="line">*/</span></span><br><span class="line"><span class="keyword">var</span> filter = <span class="keyword">new</span> Point(<span class="number">2</span>,<span class="number">2</span>);</span><br><span class="line"><span class="keyword">var</span> newPoints = points.filter(<span class="function"><span class="keyword">function</span>(<span class="params">point</span>)</span>{</span><br><span class="line"> <span class="keyword">return</span> (point.x == filter.x) && (point.y == filter.y);</span><br><span class="line">});</span><br><span class="line"><span class="built_in">console</span>.log(newPoints );</span><br><span class="line"><span class="comment">/* [ { x: 2, y: 2 } ] */</span></span><br></pre></td></tr></table></figure>
</div>
@@ -244,7 +244,7 @@
<div class="post-nav-next post-nav-item">
- <a href="/2015/05/29/javascript-note-04/">JavaScript学习笔记-列表</a>
+ <a href="/2015/05/29/javascript-note-01/">JavaScript学习笔记-数组</a>
</div>
</div>
@@ -354,6 +354,10 @@
+ <div class="links-of-author motion-element">
+
+ </div>
+
</div>
diff --git a/2015/05/29/javascript-note-03/index.html b/2015/05/29/javascript-note-03/index.html
index 7345eee..b94eade 100644
--- a/2015/05/29/javascript-note-03/index.html
+++ b/2015/05/29/javascript-note-03/index.html
@@ -219,7 +219,7 @@
<h4 id="1-_创建一个记录学生成绩的对象,提供一个添加成绩的方法,以及一个显示学生平均成绩的方法。">1. 创建一个记录学生成绩的对象,提供一个添加成绩的方法,以及一个显示学生平均成绩的方法。</h4><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">Grade</span>(<span class="params">chinese,english,math</span>)</span>{</span><br><span class="line"> <span class="keyword">this</span>.dataStore = [chinese,english,math]</span><br><span class="line"> <span class="keyword">this</span>.average = <span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>{</span><br><span class="line"> <span class="keyword">var</span> total = <span class="keyword">this</span>.dataStore.reduce(<span class="function"><span class="keyword">function</span>(<span class="params">currenTotal,currenNum</span>)</span>{</span><br><span class="line"> <span class="keyword">return</span> currenTotal + currenNum;</span><br><span class="line"> });</span><br><span class="line"> <span class="keyword">return</span> total/<span class="keyword">this</span>.dataStore.length;</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">Grades</span>(<span class="params"></span>)</span>{</span><br><span class="line"> <span class="keyword">this</span>.dataStore = [];</span><br><span class="line"> <span class="keyword">this</span>.add = <span class="function"><span class="keyword">function</span>(<span class="params">grade</span>)</span>{</span><br><span class="line"> <span class="keyword">this</span>.dataStore.push(grade);</span><br><span class="line"> };</span><br><span class="line"> <span class="keyword">this</span>.average = <span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>{</span><br><span class="line"> <span class="keyword">var</span> averages = <span class="keyword">this</span>.dataStore.map(<span class="function"><span class="keyword">function</span>(<span class="params">grade</span>)</span>{</span><br><span class="line"> <span class="keyword">return</span> grade.average();</span><br><span class="line"> });</span><br><span class="line"> <span class="built_in">console</span>.log(averages);</span><br><span class="line"> <span class="keyword">var</span> total = averages.reduce(<span class="function"><span class="keyword">function</span>(<span class="params">currenTotal,currenNum</span>)</span>{</span><br><span class="line"> <span class="keyword">return</span> currenTotal + currenNum;</span><br><span class="line"> });</span><br><span class="line"> <span class="keyword">return</span> total/<span class="keyword">this</span>.dataStore.length;</span><br><span class="line"> };</span><br><span class="line"> </span><br><span class="line"> <span class="keyword">this</span>.englishAverage = <span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>{</span><br><span class="line"> <span class="keyword">var</span> englishs = <span class="keyword">this</span>.dataStore.map(<span class="function"><span class="keyword">function</span>(<span class="params">grade</span>)</span>{</span><br><span class="line"> <span class="keyword">return</span> grade.dataStore[<span class="number">0</span>];</span><br><span class="line"> });</span><br><span class="line"> <span class="built_in">console</span>.log(englishs);</span><br><span class="line"> <span class="keyword">var</span> total = englishs.reduce(<span class="function"><span class="keyword">function</span>(<span class="params">currenTotal,currenNum</span>)</span>{</span><br><span class="line"> <span class="keyword">return</span> currenTotal + currenNum;</span><br><span class="line"> });</span><br><span class="line"> <span class="keyword">return</span> total/<span class="keyword">this</span>.dataStore.length;</span><br><span class="line"> };</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">var</span> g1 = <span class="keyword">new</span> Grade(<span class="number">90</span>,<span class="number">98</span>,<span class="number">95</span>);</span><br><span class="line"><span class="keyword">var</span> g2 = <span class="keyword">new</span> Grade(<span class="number">83</span>,<span class="number">79</span>,<span class="number">82</span>);</span><br><span class="line"><span class="keyword">var</span> g3 = <span class="keyword">new</span> Grade(<span class="number">46</span>,<span class="number">53</span>,<span class="number">22</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">var</span> grades = <span class="keyword">new</span> Grades();</span><br><span class="line">grades.add(g1);</span><br><span class="line">grades.add(g2);</span><br><span class="line">grades.add(g3);</span><br><span class="line"></span><br><span class="line"><span class="built_in">console</span>.log(grades.average());</span><br><span class="line"><span class="built_in">console</span>.log(grades.englishAverage());</span><br></pre></td></tr></table></figure>
<a id="more"></a>
-<h4 id="2-_将一组单词存储在一个数组中,并按正序和倒序分别显示这些单词。">2. 将一组单词存储在一个数组中,并按正序和倒序分别显示这些单词。</h4><figure class="highlight applescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">var <span class="property">words</span> = ['one','two','three','four'];</span><br><span class="line"><span class="property">words</span>.sort();</span><br><span class="line">console.<span class="command">log</span>(<span class="property">words</span>);</span><br><span class="line"><span class="property">words</span>.<span class="property">reverse</span>();</span><br><span class="line">console.<span class="command">log</span>(<span class="property">words</span>);</span><br></pre></td></tr></table></figure>
+<h4 id="2-_将一组单词存储在一个数组中,并按正序和倒序分别显示这些单词。">2. 将一组单词存储在一个数组中,并按正序和倒序分别显示这些单词。</h4><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> words = [<span class="string">'one'</span>,<span class="string">'two'</span>,<span class="string">'three'</span>,<span class="string">'four'</span>];</span><br><span class="line">words.sort();</span><br><span class="line"><span class="built_in">console</span>.log(words);</span><br><span class="line">words.reverse();</span><br><span class="line"><span class="built_in">console</span>.log(words);</span><br></pre></td></tr></table></figure>
<h4 id="3-_创建这样一个对象,它将字母存储在一个数组中,并且用一个方法可以将字母连在一起,显示成一个单词。">3. 创建这样一个对象,它将字母存储在一个数组中,并且用一个方法可以将字母连在一起,显示成一个单词。</h4><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">Word</span>(<span class="params"></span>)</span>{</span><br><span class="line"> <span class="keyword">this</span>.dataStore = [];</span><br><span class="line"> <span class="keyword">this</span>.add = <span class="function"><span class="keyword">function</span>(<span class="params">char</span>)</span>{</span><br><span class="line"> <span class="keyword">this</span>.dataStore.push(char);</span><br><span class="line"> };</span><br><span class="line"> <span class="keyword">this</span>.toString = <span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>{</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">this</span>.dataStore.join(<span class="string">""</span>);</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">var</span> word = <span class="keyword">new</span> Word();</span><br><span class="line">word.add(<span class="string">'g'</span>);</span><br><span class="line">word.add(<span class="string">'o'</span>);</span><br><span class="line">word.add(<span class="string">'o'</span>);</span><br><span class="line">word.add(<span class="string">'d'</span>);</span><br><span class="line"><span class="built_in">console</span>.log(word.toString());</span><br></pre></td></tr></table></figure>
</div>
@@ -237,7 +237,7 @@
<div class="post-nav">
<div class="post-nav-prev post-nav-item">
- <a href="/2015/05/29/javascript-note-01/">JavaScript学习笔记-数组</a>
+ <a href="/2015/05/29/javascript-note-04/">JavaScript学习笔记-列表</a>
</div>
@@ -353,6 +353,10 @@
+ <div class="links-of-author motion-element">
+
+ </div>
+
</div>
diff --git a/2015/05/29/javascript-note-04/index.html b/2015/05/29/javascript-note-04/index.html
index 70cc9d9..1d5eee6 100644
--- a/2015/05/29/javascript-note-04/index.html
+++ b/2015/05/29/javascript-note-04/index.html
@@ -234,13 +234,13 @@
<div class="post-nav">
<div class="post-nav-prev post-nav-item">
- <a href="/2015/05/29/javascript-note-02/">JavaScript学习笔记-数组2</a>
+ <a href="/2015/05/29/javascript-note-05/">JavaScript学习笔记-栈</a>
</div>
<div class="post-nav-next post-nav-item">
- <a href="/2015/05/29/javascript-note-05/">JavaScript学习笔记-栈</a>
+ <a href="/2015/05/29/javascript-note-03/">JavaScript学习笔记-数组练习题</a>
</div>
</div>
@@ -350,6 +350,10 @@
+ <div class="links-of-author motion-element">
+
+ </div>
+
</div>
diff --git a/2015/05/29/javascript-note-05/index.html b/2015/05/29/javascript-note-05/index.html
index 5147127..955b83d 100644
--- a/2015/05/29/javascript-note-05/index.html
+++ b/2015/05/29/javascript-note-05/index.html
@@ -228,17 +228,17 @@
<li>属性:栈内是否有元素boolean:empty //可以使用top=0进行判断,</li>
</ul>
<a id="more"></a>
-<figure class="highlight actionscript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">Stack</span><span class="params">()</span></span>{</span><br><span class="line"> <span class="keyword">this</span>.dataStore = [];</span><br><span class="line"> <span class="keyword">this</span>.top = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">this</span>.push = <span class="function"><span class="keyword">function</span><span class="params">(element)</span></span>{</span><br><span class="line"> <span class="keyword">this</span>.dataStore[<span class="keyword">this</span>.top++] = element;</span><br><span class="line"> };</span><br><span class="line"> <span class="keyword">this</span>.pop = <span class="function"><span class="keyword">function</span><span class="params">()</span></span>{</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">this</span>.dataStore[--<span class="keyword">this</span>.top];</span><br><span class="line"> };</span><br><span class="line"> <span class="keyword">this</span>.peek = <span class="function"><span class="keyword">function</span><span class="params">()</span></span>{</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">this</span>.dataStore[<span class="keyword">this</span>.top - <span class="number">1</span>];</span><br><span class="line"> };</span><br><span class="line"> <span class="keyword">this</span>.length = <span class="function"><span class="keyword">function</span><span class="params">()</span></span>{</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">this</span>.top;</span><br><span class="line"> };</span><br><span class="line"> <span class="keyword">this</span>.clear = <span class="function"><span class="keyword">function</span><span class="params">()</span></span>{</span><br><span class="line"> <span class="keyword">this</span>.top = <span class="number">0</span>;</span><br><span class="line"> };</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
-<h3 id="使用栈">使用栈</h3><figure class="highlight openscad"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">var s = new Stack<span class="params">()</span>;</span><br><span class="line">s.push<span class="params">('iDarker')</span>;</span><br><span class="line">s.push<span class="params">('xiachuan')</span>;</span><br><span class="line">s.push<span class="params">('qianxia')</span>;</span><br><span class="line">console.<span class="built_in">log</span><span class="params">('length:' + s.length<span class="params">()</span>)</span>; <span class="comment">//length:3</span></span><br><span class="line">console.<span class="built_in">log</span><span class="params">('peek:' + s.peek<span class="params">()</span>)</span>; <span class="comment">//peek: qianxia</span></span><br><span class="line">var poped = s.pop<span class="params">()</span>;</span><br><span class="line">console.<span class="built_in">log</span><span class="params">('poped :' + poped)</span>; <span class="comment">//poped : qianxia</span></span><br><span class="line">console.<span class="built_in">log</span><span class="params">('peek:' + s.peek<span class="params">()</span>)</span>; <span class="comment">//peek: xiachuan</span></span><br><span class="line">s.push<span class="params">('love')</span>;</span><br><span class="line">console.<span class="built_in">log</span><span class="params">('peek:' + s.peek<span class="params">()</span>)</span>; <span class="comment">//peek: love</span></span><br><span class="line">s.clear<span class="params">()</span>;</span><br><span class="line">console.<span class="built_in">log</span><span class="params">('length:' + s.length<span class="params">()</span>)</span>; <span class="comment">//length:0</span></span><br><span class="line">console.<span class="built_in">log</span><span class="params">('peek:' + s.peek<span class="params">()</span>)</span>; <span class="comment">//peek:undefined</span></span><br></pre></td></tr></table></figure>
+<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">Stack</span>(<span class="params"></span>)</span>{</span><br><span class="line"> <span class="keyword">this</span>.dataStore = [];</span><br><span class="line"> <span class="keyword">this</span>.top = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">this</span>.push = <span class="function"><span class="keyword">function</span>(<span class="params">element</span>)</span>{</span><br><span class="line"> <span class="keyword">this</span>.dataStore[<span class="keyword">this</span>.top++] = element;</span><br><span class="line"> };</span><br><span class="line"> <span class="keyword">this</span>.pop = <span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>{</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">this</span>.dataStore[--<span class="keyword">this</span>.top];</span><br><span class="line"> };</span><br><span class="line"> <span class="keyword">this</span>.peek = <span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>{</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">this</span>.dataStore[<span class="keyword">this</span>.top - <span class="number">1</span>];</span><br><span class="line"> };</span><br><span class="line"> <span class="keyword">this</span>.length = <span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>{</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">this</span>.top;</span><br><span class="line"> };</span><br><span class="line"> <span class="keyword">this</span>.clear = <span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>{</span><br><span class="line"> <span class="keyword">this</span>.top = <span class="number">0</span>;</span><br><span class="line"> };</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
+<h3 id="使用栈">使用栈</h3><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> s = <span class="keyword">new</span> Stack();</span><br><span class="line">s.push(<span class="string">'iDarker'</span>);</span><br><span class="line">s.push(<span class="string">'xiachuan'</span>);</span><br><span class="line">s.push(<span class="string">'qianxia'</span>);</span><br><span class="line"><span class="built_in">console</span>.log(<span class="string">'length:'</span> + s.length()); <span class="comment">//length:3</span></span><br><span class="line"><span class="built_in">console</span>.log(<span class="string">'peek:'</span> + s.peek()); <span class="comment">//peek: qianxia</span></span><br><span class="line"><span class="keyword">var</span> poped = s.pop();</span><br><span class="line"><span class="built_in">console</span>.log(<span class="string">'poped :'</span> + poped); <span class="comment">//poped : qianxia</span></span><br><span class="line"><span class="built_in">console</span>.log(<span class="string">'peek:'</span> + s.peek()); <span class="comment">//peek: xiachuan</span></span><br><span class="line">s.push(<span class="string">'love'</span>);</span><br><span class="line"><span class="built_in">console</span>.log(<span class="string">'peek:'</span> + s.peek()); <span class="comment">//peek: love</span></span><br><span class="line">s.clear();</span><br><span class="line"><span class="built_in">console</span>.log(<span class="string">'length:'</span> + s.length()); <span class="comment">//length:0</span></span><br><span class="line"><span class="built_in">console</span>.log(<span class="string">'peek:'</span> + s.peek()); <span class="comment">//peek:undefined</span></span><br></pre></td></tr></table></figure>
<h3 id="栈能解决什么问题">栈能解决什么问题</h3><p><strong>使用栈进行进制转换</strong></p>
<ul>
<li>十六进制转为十进制 (这个问题不应该用栈解决,数组本身比这更好,想岔了 (ˇˍˇ))</li>
</ul>
-<figure class="highlight stata"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">function Hex2Dec(hex){</span><br><span class="line"> <span class="keyword">var</span> chars = hex.toUpperCase().<span class="keyword">split</span>('').<span class="literal">reverse</span>(); <span class="comment">//统一转换为大写-->分割成字符数组-->倒序排列</span></span><br><span class="line"> <span class="keyword">var</span> <span class="keyword">stack</span> = new <span class="keyword">Stack</span>();</span><br><span class="line"> chars.<span class="keyword">forEach</span>(function(<span class="keyword">char</span>){</span><br><span class="line"> <span class="keyword">var</span> code = <span class="keyword">char</span>.charCodeAt(); <span class="comment">//获取字符串第一个元素的ascii码(实际上是Unicode码)</span></span><br><span class="line"> <span class="keyword">var</span> num = 0;</span><br><span class="line"> <span class="keyword">if</span>(code > 64){ <span class="comment">//判断是否大于'A'=65</span></span><br><span class="line"> num = code - 55; <span class="comment">//'A'->10 'B'->11</span></span><br><span class="line"> <span class="keyword">stack</span>.push(num);</span><br><span class="line"> }<span class="keyword">else</span>{</span><br><span class="line"> num = code - 48; <span class="comment">//char('0')=ascii(48)</span></span><br><span class="line"> <span class="keyword">stack</span>.push(num);</span><br><span class="line"> }</span><br><span class="line"> });</span><br><span class="line"> <span class="keyword">var</span> converted = 0;</span><br><span class="line"> <span class="keyword">while</span>(<span class="keyword">stack</span>.<span class="literal">length</span>()>0){</span><br><span class="line"> converted = converted*16 + <span class="keyword">stack</span>.pop();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> converted;</span><br><span class="line">}</span><br><span class="line">console.<span class="literal">log</span>(Hex2Dec('123')); <span class="comment">// 291</span></span><br><span class="line">console.<span class="literal">log</span>(Hex2Dec('ABC')); <span class="comment">//2748</span></span><br><span class="line">console.<span class="literal">log</span>(Hex2Dec('121ABCcd')); <span class="comment">// 303742157</span></span><br></pre></td></tr></table></figure>
+<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">Hex2Dec</span>(<span class="params">hex</span>)</span>{</span><br><span class="line"> <span class="keyword">var</span> chars = hex.toUpperCase().split(<span class="string">''</span>).reverse(); <span class="comment">//统一转换为大写-->分割成字符数组-->倒序排列</span></span><br><span class="line"> <span class="keyword">var</span> stack = <span class="keyword">new</span> Stack();</span><br><span class="line"> chars.forEach(<span class="function"><span class="keyword">function</span>(<span class="params">char</span>)</span>{</span><br><span class="line"> <span class="keyword">var</span> code = char.charCodeAt(); <span class="comment">//获取字符串第一个元素的ascii码(实际上是Unicode码)</span></span><br><span class="line"> <span class="keyword">var</span> num = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">if</span>(code > <span class="number">64</span>){ <span class="comment">//判断是否大于'A'=65</span></span><br><span class="line"> num = code - <span class="number">55</span>; <span class="comment">//'A'->10 'B'->11</span></span><br><span class="line"> stack.push(num);</span><br><span class="line"> }<span class="keyword">else</span>{</span><br><span class="line"> num = code - <span class="number">48</span>; <span class="comment">//char('0')=ascii(48)</span></span><br><span class="line"> stack.push(num);</span><br><span class="line"> }</span><br><span class="line"> });</span><br><span class="line"> <span class="keyword">var</span> converted = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span>(stack.length()><span class="number">0</span>){</span><br><span class="line"> converted = converted*<span class="number">16</span> + stack.pop();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> converted;</span><br><span class="line">}</span><br><span class="line"><span class="built_in">console</span>.log(Hex2Dec(<span class="string">'123'</span>)); <span class="comment">// 291</span></span><br><span class="line"><span class="built_in">console</span>.log(Hex2Dec(<span class="string">'ABC'</span>)); <span class="comment">//2748</span></span><br><span class="line"><span class="built_in">console</span>.log(Hex2Dec(<span class="string">'121ABCcd'</span>)); <span class="comment">// 303742157</span></span><br></pre></td></tr></table></figure>
<ul>
<li>十进制转为十六进制/二进制/8进制</li>
</ul>
-<figure class="highlight openscad"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">convert</span><span class="params">(num,base)</span>{</span></span><br><span class="line"> var s = new Stack<span class="params">()</span>;</span><br><span class="line"> do{</span><br><span class="line"> s.push<span class="params">(num % base)</span>;</span><br><span class="line"> num = Math.<span class="built_in">floor</span><span class="params">(num / base)</span>;</span><br><span class="line"> }while<span class="params">(num > <span class="number">0</span>)</span>;</span><br><span class="line"> </span><br><span class="line"> var converted =<span class="string">""</span>;</span><br><span class="line"> while<span class="params">(s.length<span class="params">()</span> > <span class="number">0</span>)</span>{</span><br><span class="line"> var poped = s.pop<span class="params">()</span>;</span><br><span class="line"> <span class="keyword">if</span><span class="params">(poped > <span class="number">9</span>)</span>{</span><br><span class="line"> converted += String.fromCharCode<span class="params">(poped+<span class="number">55</span>)</span>;</span><br><span class="line"> }<span class="keyword">else</span>{</span><br><span class="line"> converted += poped;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> return converted;</span><br><span class="line">}</span><br><span class="line">console.<span class="built_in">log</span><span class="params">(convert<span class="params">(<span class="number">303742157</span>,<span class="number">16</span>)</span>)</span>; <span class="comment">//121ABCCD</span></span><br><span class="line">console.<span class="built_in">log</span><span class="params">(convert<span class="params">(<span class="number">100</span>,<span class="number">16</span>)</span>)</span>; <span class="comment">//64</span></span><br><span class="line">console.<span class="built_in">log</span><span class="params">(convert<span class="params">(<span class="number">100</span>,<span class="number">10</span>)</span>)</span>; <span class="comment">//100</span></span><br><span class="line">console.<span class="built_in">log</span><span class="params">(convert<span class="params">(<span class="number">100</span>,<span class="number">8</span>)</span>)</span>; <span class="comment">//144</span></span><br><span class="line">console.<span class="built_in">log</span><span class="params">(convert<span class="params">(<span class="number">100</span>,<span class="number">2</span>)</span>)</span>; <span class="comment">//1100100</span></span><br><span class="line">console.<span class="built_in">log</span><span class="params">(convert<span class="params">(<span class="number">303742157</span>,<span class="number">20</span>)</span>)</span>; <span class="comment">//4EI7F7H (ˇˍˇ) ~</span></span><br></pre></td></tr></table></figure>
+<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">convert</span>(<span class="params">num,base</span>)</span>{</span><br><span class="line"> <span class="keyword">var</span> s = <span class="keyword">new</span> Stack();</span><br><span class="line"> <span class="keyword">do</span>{</span><br><span class="line"> s.push(num % base);</span><br><span class="line"> num = <span class="built_in">Math</span>.floor(num / base);</span><br><span class="line"> }<span class="keyword">while</span>(num > <span class="number">0</span>);</span><br><span class="line"> </span><br><span class="line"> <span class="keyword">var</span> converted =<span class="string">""</span>;</span><br><span class="line"> <span class="keyword">while</span>(s.length() > <span class="number">0</span>){</span><br><span class="line"> <span class="keyword">var</span> poped = s.pop();</span><br><span class="line"> <span class="keyword">if</span>(poped > <span class="number">9</span>){</span><br><span class="line"> converted += <span class="built_in">String</span>.fromCharCode(poped+<span class="number">55</span>);</span><br><span class="line"> }<span class="keyword">else</span>{</span><br><span class="line"> converted += poped;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> converted;</span><br><span class="line">}</span><br><span class="line"><span class="built_in">console</span>.log(convert(<span class="number">303742157</span>,<span class="number">16</span>)); <span class="comment">//121ABCCD</span></span><br><span class="line"><span class="built_in">console</span>.log(convert(<span class="number">100</span>,<span class="number">16</span>)); <span class="comment">//64</span></span><br><span class="line"><span class="built_in">console</span>.log(convert(<span class="number">100</span>,<span class="number">10</span>)); <span class="comment">//100</span></span><br><span class="line"><span class="built_in">console</span>.log(convert(<span class="number">100</span>,<span class="number">8</span>)); <span class="comment">//144</span></span><br><span class="line"><span class="built_in">console</span>.log(convert(<span class="number">100</span>,<span class="number">2</span>)); <span class="comment">//1100100</span></span><br><span class="line"><span class="built_in">console</span>.log(convert(<span class="number">303742157</span>,<span class="number">20</span>)); <span class="comment">//4EI7F7H (ˇˍˇ) ~</span></span><br></pre></td></tr></table></figure>
<ul>
<li>数组的reverse函数</li>
</ul>
@@ -246,11 +246,11 @@
<ul>
<li>判断字符串是否为回文<br>回文是指这样一种现象: 一个单词、 短语或数字, 从前往后写和从后往前写都是一样的。</li>
</ul>
-<figure class="highlight openscad"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">isPalindrome</span><span class="params">(word)</span> {</span></span><br><span class="line"> var s = new Stack<span class="params">()</span>;</span><br><span class="line"> <span class="keyword">for</span> <span class="params">(var i = <span class="number">0</span>; i < word. length; ++i)</span> {</span><br><span class="line"> s. push<span class="params">(word[i] )</span>;</span><br><span class="line"> }</span><br><span class="line"> var rword = <span class="string">""</span>;</span><br><span class="line"> while <span class="params">(s. length<span class="params">()</span> > <span class="number">0</span>)</span> {</span><br><span class="line"> rword += s. pop<span class="params">()</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span> <span class="params">(word == rword)</span> {</span><br><span class="line"> return <span class="literal">true</span>;</span><br><span class="line"> }<span class="keyword">else</span> {</span><br><span class="line"> return <span class="literal">false</span>;</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">var word = <span class="string">"hello"</span> ;</span><br><span class="line"><span class="keyword">if</span> <span class="params">(isPalindrome<span class="params">(word)</span>)</span> {</span><br><span class="line"> console.<span class="built_in">log</span><span class="params">(word + <span class="string">" is a palindrome. "</span> )</span>;</span><br><span class="line">}<span class="keyword">else</span> {</span><br><span class="line"> console.<span class="built_in">log</span><span class="params">(word + <span class="string">" is not a palindrome. "</span> )</span>;</span><br><span class="line">}</span><br><span class="line">word = <span class="string">"racecar"</span></span><br><span class="line"><span class="keyword">if</span> <span class="params">(isPalindrome<span class="params">(word)</span>)</span> {</span><br><span class="line"> console.<span class="built_in">log</span><span class="params">(word + <span class="string">" is a palindrome. "</span> )</span>;</span><br><span class="line">}<span class="keyword">else</span> {</span><br><span class="line"> console.<span class="built_in">log</span><span class="params">(word + <span class="string">" is not a palindrome. "</span> )</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
+<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">isPalindrome</span>(<span class="params">word</span>) </span>{</span><br><span class="line"> <span class="keyword">var</span> s = <span class="keyword">new</span> Stack();</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">var</span> i = <span class="number">0</span>; i < word. length; ++i) {</span><br><span class="line"> s. push(word[i] );</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">var</span> rword = <span class="string">""</span>;</span><br><span class="line"> <span class="keyword">while</span> (s. length() > <span class="number">0</span>) {</span><br><span class="line"> rword += s. pop();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span> (word == rword) {</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line"> }<span class="keyword">else</span> {</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">var</span> word = <span class="string">"hello"</span> ;</span><br><span class="line"><span class="keyword">if</span> (isPalindrome(word)) {</span><br><span class="line"> <span class="built_in">console</span>.log(word + <span class="string">" is a palindrome. "</span> );</span><br><span class="line">}<span class="keyword">else</span> {</span><br><span class="line"> <span class="built_in">console</span>.log(word + <span class="string">" is not a palindrome. "</span> );</span><br><span class="line">}</span><br><span class="line">word = <span class="string">"racecar"</span></span><br><span class="line"><span class="keyword">if</span> (isPalindrome(word)) {</span><br><span class="line"> <span class="built_in">console</span>.log(word + <span class="string">" is a palindrome. "</span> );</span><br><span class="line">}<span class="keyword">else</span> {</span><br><span class="line"> <span class="built_in">console</span>.log(word + <span class="string">" is not a palindrome. "</span> );</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<ul>
<li>用栈实现函数的递归调用<br>求阶乘5! = 5<em>4</em>3<em>2</em>1 = 120</li>
</ul>
-<figure class="highlight openscad"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">factorial</span><span class="params">(n)</span>{</span></span><br><span class="line"> <span class="keyword">if</span><span class="params">(n == <span class="number">0</span>)</span>{</span><br><span class="line"> return <span class="number">1</span>;</span><br><span class="line"> }<span class="keyword">else</span>{</span><br><span class="line"> return n <span class="built_in">*</span> factorial<span class="params">(n-<span class="number">1</span>)</span>;</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">fact</span><span class="params">(n)</span>{</span></span><br><span class="line"> var s = new Stack<span class="params">()</span>;</span><br><span class="line"> while<span class="params">(n><span class="number">1</span>)</span>{</span><br><span class="line"> s.push<span class="params">(n--)</span>;</span><br><span class="line"> }</span><br><span class="line"> var product = <span class="number">1</span>;</span><br><span class="line"> while<span class="params">(s.length<span class="params">()</span> > <span class="number">0</span>)</span>{</span><br><span class="line"> product <span class="built_in">*</span>= s.pop<span class="params">()</span>;</span><br><span class="line"> }</span><br><span class="line"> return product;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">console.<span class="built_in">log</span><span class="params">(factorial<span class="params">(<span class="number">5</span>)</span>)</span>;</span><br><span class="line">console.<span class="built_in">log</span><span class="params">(fact<span class="params">(<span class="number">5</span>)</span>)</span>;</span><br></pre></td></tr></table></figure>
+<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">factorial</span>(<span class="params">n</span>)</span>{</span><br><span class="line"> <span class="keyword">if</span>(n == <span class="number">0</span>){</span><br><span class="line"> <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line"> }<span class="keyword">else</span>{</span><br><span class="line"> <span class="keyword">return</span> n * factorial(n-<span class="number">1</span>);</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">fact</span>(<span class="params">n</span>)</span>{</span><br><span class="line"> <span class="keyword">var</span> s = <span class="keyword">new</span> Stack();</span><br><span class="line"> <span class="keyword">while</span>(n><span class="number">1</span>){</span><br><span class="line"> s.push(n--);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">var</span> product = <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">while</span>(s.length() > <span class="number">0</span>){</span><br><span class="line"> product *= s.pop();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> product;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="built_in">console</span>.log(factorial(<span class="number">5</span>));</span><br><span class="line"><span class="built_in">console</span>.log(fact(<span class="number">5</span>));</span><br></pre></td></tr></table></figure>
</div>
@@ -267,13 +267,13 @@
<div class="post-nav">
<div class="post-nav-prev post-nav-item">
- <a href="/2015/05/29/javascript-note-04/">JavaScript学习笔记-列表</a>
+ <a href="/2015/05/29/netmapping-01/">分布式端口映射NetMapping的设计与实现</a>
</div>
<div class="post-nav-next post-nav-item">
- <a href="/2015/05/29/netmapping-01/">分布式端口映射NetMapping的设计与实现</a>
+ <a href="/2015/05/29/javascript-note-04/">JavaScript学习笔记-列表</a>
</div>
</div>
@@ -383,6 +383,10 @@
+ <div class="links-of-author motion-element">
+
+ </div>
+
</div>
diff --git a/2015/05/29/netmapping-01/index.html b/2015/05/29/netmapping-01/index.html
index 84b1668..ce266f4 100644
--- a/2015/05/29/netmapping-01/index.html
+++ b/2015/05/29/netmapping-01/index.html
@@ -235,12 +235,14 @@
<div class="post-nav">
<div class="post-nav-prev post-nav-item">
- <a href="/2015/05/29/javascript-note-05/">JavaScript学习笔记-栈</a>
+ <a href="/2015/06/06/coredump-01/">使用gdb解析core dump-概念篇</a>
</div>
<div class="post-nav-next post-nav-item">
+ <a href="/2015/05/29/javascript-note-05/">JavaScript学习笔记-栈</a>
+
</div>
</div>
@@ -349,6 +351,10 @@
+ <div class="links-of-author motion-element">
+
+ </div>
+
</div>
diff --git a/2015/06/06/coredump-01/index.html b/2015/06/06/coredump-01/index.html
index 3e51455..4b0c720 100644
--- a/2015/06/06/coredump-01/index.html
+++ b/2015/06/06/coredump-01/index.html
@@ -223,7 +223,7 @@
<p><strong>修改core文件位置</strong></p>
<p>默认情况下会在程序所在目录生成文件名为<code>core</code>的core文件;<br>使用<code>echo 1 > /proc/sys/kernel/core_uses_pid</code>可以在生成带进程PID的core文件,文件形式为<code>core.pid</code>;<br>使用<code>echo "/tmp/core/core-%e.%p" > /proc/sys/kernel/core_pattern</code>可以在<code>/tmp/core</code>中生成格式为<code>core-程序名.pid</code>的core文件。</p>
<h3 id="Core_dump如何产生?">Core dump如何产生?</h3><p>我们知道了程序在<strong>程序崩溃</strong>或者<strong>异常终止</strong>的时候会产生core文件呢?那么使用<code>kill -9</code>会产生core文件吗?<br>我们不妨做个试验。我们给helloword程序加上死循环来进行测试。</p>
-<figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="preprocessor">#<span class="keyword">include</span> <stdio.h></span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">(<span class="keyword">int</span> argc, <span class="keyword">char</span> **argv)</span></span><br><span class="line"></span>{</span><br><span class="line"> <span class="keyword">while</span>(<span class="number">1</span>){</span><br><span class="line"> <span class="built_in">fprintf</span>(stdout,<span class="string">"Hello World!\n"</span>);</span><br><span class="line"> fflush(stdout);</span><br><span class="line"> sleep(<span class="number">5</span>);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
+<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="preprocessor">#<span class="keyword">include</span> <stdio.h></span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">(<span class="keyword">int</span> argc, <span class="keyword">char</span> **argv)</span></span><br><span class="line"></span>{</span><br><span class="line"> <span class="keyword">while</span>(<span class="number">1</span>){</span><br><span class="line"> <span class="built_in">fprintf</span>(stdout,<span class="string">"Hello World!\n"</span>);</span><br><span class="line"> fflush(stdout);</span><br><span class="line"> sleep(<span class="number">5</span>);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<figure class="highlight elixir"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="variable">$ </span>gcc hello.c -o hello</span><br><span class="line"><span class="variable">$ </span>./hello</span><br><span class="line"><span class="constant">Hello World!</span></span><br><span class="line"><span class="constant">Hello World!</span></span><br><span class="line"><span class="variable">$ </span>ps -ef | grep hello</span><br><span class="line">archerd+ <span class="number">2890</span> <span class="number">2044</span> <span class="number">0</span> <span class="number">20</span><span class="symbol">:</span><span class="number">55</span> pts/<span class="number">1</span> <span class="number">00</span><span class="symbol">:</span><span class="number">00</span><span class="symbol">:</span><span class="number">00</span> ./hello</span><br></pre></td></tr></table></figure>
<p>接下来我们使用下面的命令结束进程,发现没有生成core文件。</p>
<blockquote>
@@ -258,7 +258,7 @@
<div class="post-nav-next post-nav-item">
- <a href="/2015/05/29/javascript-note-01/">JavaScript学习笔记-数组</a>
+ <a href="/2015/05/29/netmapping-01/">分布式端口映射NetMapping的设计与实现</a>
</div>
</div>
@@ -368,6 +368,10 @@
+ <div class="links-of-author motion-element">
+
+ </div>
+
</div>
diff --git a/2015/06/11/coredump-02/index.html b/2015/06/11/coredump-02/index.html
index c311234..c771365 100644
--- a/2015/06/11/coredump-02/index.html
+++ b/2015/06/11/coredump-02/index.html
@@ -224,19 +224,19 @@
<p>接下来开始解析这个core文件;错误提示非常明显<code>Program terminated with signal SIGQUIT, Quit.</code>;</p>
<figure class="highlight nimrod"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">archerding@ubuntu:/tmp/core$ gdb ~/hello core-hello.<span class="number">2213</span></span><br><span class="line"><span class="type">GNU</span> gdb (<span class="type">Ubuntu</span> <span class="number">7</span>.<span class="number">9</span>-<span class="number">1</span>ubuntu1) <span class="number">7</span>.<span class="number">9</span></span><br><span class="line"><span class="type">Copyright</span> (C) <span class="number">2015</span> <span class="type">Free</span> <span class="type">Software</span> <span class="type">Foundation</span>, <span class="type">Inc</span>.</span><br><span class="line"><span class="type">License</span> <span class="type">GPLv3</span>+: <span class="type">GNU</span> <span class="type">GPL</span> version <span class="number">3</span> <span class="keyword">or</span> later <http://gnu.org/licenses/gpl.html></span><br><span class="line"><span class="type">This</span> <span class="keyword">is</span> free software: you are free to change <span class="keyword">and</span> redistribute it.</span><br><span class="line"><span class="type">There</span> <span class="keyword">is</span> <span class="type">NO</span> <span class="type">WARRANTY</span>, to the extent permitted by law. <span class="type">Type</span> <span class="string">"show copying"</span></span><br><span class="line"><span class="keyword">and</span> <span class="string">"show warranty"</span> <span class="keyword">for</span> details.</span><br><span class="line"><span class="type">This</span> <span class="type">GDB</span> was configured <span class="keyword">as</span> <span class="string">"x86_64-linux-gnu"</span>.</span><br><span class="line"><span class="type">Type</span> <span class="string">"show configuration"</span> <span class="keyword">for</span> configuration details.</span><br><span class="line"><span class="type">For</span> bug reporting instructions, please see:</span><br><span class="line"><http://www.gnu.org/software/gdb/bugs/>.</span><br><span class="line"><span class="type">Find</span> the <span class="type">GDB</span> manual <span class="keyword">and</span> other documentation resources online at:</span><br><span class="line"><http://www.gnu.org/software/gdb/documentation/>.</span><br><span class="line"><span class="type">For</span> help, <span class="keyword">type</span> <span class="string">"help"</span>.</span><br><span class="line"><span class="type">Type</span> <span class="string">"apropos word"</span> to search <span class="keyword">for</span> commands related to <span class="string">"word"</span>...</span><br><span class="line"><span class="type">Reading</span> symbols <span class="keyword">from</span> /home/archerding/hello...(no debugging symbols found)...done.</span><br><span class="line">[<span class="type">New</span> <span class="type">LWP</span> <span class="number">2213</span>]</span><br><span class="line"><span class="type">Core</span> was generated by `./hello'.</span><br><span class="line"><span class="type">Program</span> terminated <span class="keyword">with</span> signal <span class="type">SIGQUIT</span>, <span class="type">Quit</span>.</span><br><span class="line"><span class="comment">#0 0x00007f4e7d2a2c30 in __nanosleep_nocancel ()</span></span><br><span class="line"> at ../sysdeps/unix/syscall-<span class="keyword">template</span>.S:<span class="number">81</span></span><br><span class="line"><span class="number">81</span> ../sysdeps/unix/syscall-<span class="keyword">template</span>.S: <span class="type">No</span> such file <span class="keyword">or</span> directory.</span><br><span class="line">(gdb)</span><br></pre></td></tr></table></figure>
<h3 id="SIGABRT信号下的Core_dump解析">SIGABRT信号下的Core dump解析</h3><p><code>SIGABRT</code>信号表示调用abort函数;编写新的测试程序,尝试调用一下<code>abort()</code>函数验证一下;</p>
-<figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="preprocessor">#<span class="keyword">include</span> <stdlib.h></span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span><br><span class="line"></span>{</span><br><span class="line"> <span class="built_in">abort</span>();</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
+<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="preprocessor">#<span class="keyword">include</span> <stdlib.h></span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span><br><span class="line"></span>{</span><br><span class="line"> <span class="built_in">abort</span>();</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>编译执行,果真产生了core文件;</p>
<figure class="highlight elixir"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">archerding<span class="variable">@ubuntu</span><span class="symbol">:~</span><span class="variable">$ </span>gcc sigabort.c -o sigabort</span><br><span class="line">archerding<span class="variable">@ubuntu</span><span class="symbol">:~</span><span class="variable">$ </span>./sigabort </span><br><span class="line"><span class="constant">Aborted </span>(core dumped)</span><br><span class="line">archerding<span class="variable">@ubuntu</span><span class="symbol">:~</span><span class="variable">$ </span>ls /tmp/core/</span><br><span class="line">core-sigabort.<span class="number">2594</span></span><br></pre></td></tr></table></figure>
<p>接下来开始解析这个core文件;错误提示非常明显<code>Program terminated with signal SIGABRT, Aborted.</code>;<br>使用<code>bt</code>打印栈信息,定位错误调用了<code>abort()</code>函数。</p>
<figure class="highlight vhdl"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><span class="line">archerding@ubuntu:/tmp/core$ gdb ~/sigabort core-sigabort.<span class="number">2594</span></span><br><span class="line">GNU gdb (Ubuntu <span class="number">7.9</span>-<span class="number">1</span>ubuntu1) <span class="number">7.9</span></span><br><span class="line">Copyright (C) <span class="number">2015</span> Free Software Foundation, Inc.</span><br><span class="line">License GPLv3+: GNU GPL version <span class="number">3</span> <span class="keyword">or</span> later <http://gnu.org/licenses/gpl.html></span><br><span class="line">This <span class="keyword">is</span> free software: you are free <span class="keyword">to</span> change <span class="keyword">and</span> redistribute it.</span><br><span class="line">There <span class="keyword">is</span> NO WARRANTY, <span class="keyword">to</span> the extent permitted by law. <span class="keyword">Type</span> <span class="string">"show copying"</span></span><br><span class="line"><span class="keyword">and</span> <span class="string">"show warranty"</span> <span class="keyword">for</span> details.</span><br><span class="line">This GDB was configured as <span class="string">"x86_64-linux-gnu"</span>.</span><br><span class="line"><span class="keyword">Type</span> <span class="string">"show configuration"</span> <span class="keyword">for</span> <span class="keyword">configuration</span> details.</span><br><span class="line"><span class="keyword">For</span> bug reporting instructions, please see:</span><br><span class="line"><http://www.gnu.org/software/gdb/bugs/>.</span><br><span class="line">Find the GDB manual <span class="keyword">and</span> other documentation resources online at:</span><br><span class="line"><http://www.gnu.org/software/gdb/documentation/>.</span><br><span class="line"><span class="keyword">For</span> help, <span class="keyword">type</span> <span class="string">"help"</span>.</span><br><span class="line"><span class="keyword">Type</span> <span class="string">"apropos word"</span> <span class="keyword">to</span> search <span class="keyword">for</span> commands related <span class="keyword">to</span> <span class="string">"word"</span>...</span><br><span class="line">Reading symbols from /home/archerding/sigabort...(no debugging symbols found)...done.</span><br><span class="line"></span><br><span class="line">warning: exec <span class="keyword">file</span> <span class="keyword">is</span> newer than core <span class="keyword">file</span>.</span><br><span class="line">[<span class="keyword">New</span> LWP <span class="number">2594</span>]</span><br><span class="line">Core was generated by `./sigabort'.</span><br><span class="line">Program terminated <span class="keyword">with</span> <span class="keyword">signal</span> SIGABRT, Aborted.</span><br><span class="line">#<span class="number">0</span> <span class="number">0</span>x00007ff6657bd267 <span class="keyword">in</span> __GI_raise (sig=sig@entry=<span class="number">6</span>)</span><br><span class="line"> at ../sysdeps/unix/sysv/linux/raise.c:<span class="number">55</span></span><br><span class="line"><span class="number">55</span> ../sysdeps/unix/sysv/linux/raise.c: No such <span class="keyword">file</span> <span class="keyword">or</span> directory.</span><br><span class="line">(gdb) bt</span><br><span class="line">#<span class="number">0</span> <span class="number">0</span>x00007ff6657bd267 <span class="keyword">in</span> __GI_raise (sig=sig@entry=<span class="number">6</span>)</span><br><span class="line"> at ../sysdeps/unix/sysv/linux/raise.c:<span class="number">55</span></span><br><span class="line">#<span class="number">1</span> <span class="number">0</span>x00007ff6657beeca <span class="keyword">in</span> __GI_abort () at abort.c:<span class="number">89</span></span><br><span class="line">#<span class="number">2</span> <span class="number">0</span>x000000000040053f <span class="keyword">in</span> main ()</span><br><span class="line">Print backtrace <span class="keyword">of</span> <span class="keyword">all</span> stack frames, <span class="keyword">or</span> innermost COUNT frames.</span><br><span class="line"><span class="keyword">With</span> a negative argument, print outermost -COUNT frames.</span><br><span class="line"><span class="keyword">Use</span> <span class="keyword">of</span> the <span class="attribute">'full</span>' qualifier also prints the values <span class="keyword">of</span> the local variables.</span><br><span class="line"><span class="keyword">Use</span> <span class="keyword">of</span> the <span class="attribute">'no</span>-filters' qualifier prohibits frame filters from executing</span><br><span class="line"><span class="keyword">on</span> this backtrace.</span><br><span class="line"></span><br><span class="line">(gdb)</span><br></pre></td></tr></table></figure>
<h3 id="SIGFPE信号下的Core_dump解析">SIGFPE信号下的Core dump解析</h3><p><code>SIGFPE</code>信号表示一个算术运算异常,例如除以0,浮点溢出等;编写新的测试程序,尝试产生<code>SIGFPE</code>信号;</p>
-<figure class="highlight nimrod"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#include <stdlib.h></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> calc(<span class="type">int</span> num)</span><br><span class="line">{</span><br><span class="line"> <span class="type">int</span> divider = <span class="number">0</span>;</span><br><span class="line"> <span class="type">int</span> <span class="literal">result</span> = <span class="number">0</span>;</span><br><span class="line"> <span class="literal">result</span> = num / divider;</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">result</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> main()</span><br><span class="line">{</span><br><span class="line"> calc(<span class="number">10</span>);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
+<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="preprocessor">#<span class="keyword">include</span> <stdlib.h></span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">calc</span><span class="params">(<span class="keyword">int</span> num)</span></span><br><span class="line"></span>{</span><br><span class="line"> <span class="keyword">int</span> divider = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">int</span> result = <span class="number">0</span>;</span><br><span class="line"> result = num / divider;</span><br><span class="line"> <span class="keyword">return</span> result;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span><br><span class="line"></span>{</span><br><span class="line"> calc(<span class="number">10</span>);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>编译执行,果真产生了core文件;</p>
<figure class="highlight elixir"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">archerding<span class="variable">@ubuntu</span><span class="symbol">:~</span><span class="variable">$ </span>gcc sigfpe.c -o sigfpe</span><br><span class="line">archerding<span class="variable">@ubuntu</span><span class="symbol">:~</span><span class="variable">$ </span>./sigfpe </span><br><span class="line"><span class="constant">Floating </span>point exception (core dumped)</span><br><span class="line">archerding<span class="variable">@ubuntu</span><span class="symbol">:~</span><span class="variable">$ </span>ls /tmp/core/</span><br><span class="line">core-sigfpe.<span class="number">2722</span></span><br></pre></td></tr></table></figure>
<p>接下来开始解析这个core文件;错误提示<code>Program terminated with signal SIGFPE, Arithmetic exception.</code>;<br>使用<code>bt</code>打印栈信息,定位错误函数是<code>calc ()</code>函数;<br>使用<code>i r</code>打印寄存器信息,发现在调用到汇编指令地址<code>rip 0x40050f 0x40050f <calc+25></code>时出现异常;<br>使用<code>disas</code>反汇编问题函数,发现在调用<code>idivl -0x8(%rbp)</code>时出错,该汇编指令是做除法运算;<br>使用<code>x $rbp-0x8</code>打印除数,发现除数为0。</p>
<figure class="highlight stata"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br></pre></td><td class="code"><pre><span class="line">archerding@ubuntu:/tmp/core$ gdb ~/sigfpe core-sigfpe.2722</span><br><span class="line">GNU gdb (Ubuntu 7.9-1ubuntu1) 7.9</span><br><span class="line"><span class="keyword">Copyright</span> (C) 2015 Free Software Foundation, Inc.</span><br><span class="line">License GPLv3+: GNU GPL <span class="keyword">version</span> 3 or later <http:<span class="comment">//gnu.org/licenses/gpl.html></span></span><br><span class="line">This is free software: you are free to change and redistribute it.</span><br><span class="line">There is <span class="keyword">NO</span> WARRANTY, to the extent permitted <span class="keyword">by</span> law. <span class="keyword">Type</span> <span class="string">"show copying"</span></span><br><span class="line">and <span class="string">"show warranty"</span> <span class="keyword">for</span> details.</span><br><span class="line">This GDB was configured <span class="keyword">as</span> <span class="string">"x86_64-linux-gnu"</span>.</span><br><span class="line"><span class="keyword">Type</span> <span class="string">"show configuration"</span> <span class="keyword">for</span> configuration details.</span><br><span class="line"><span class="keyword">For</span> bug reporting instructions, please see:</span><br><span class="line"><http:<span class="comment">//www.gnu.org/software/gdb/bugs/>.</span></span><br><span class="line">Find the GDB manual and other documentation resources online at:</span><br><span class="line"><http:<span class="comment">//www.gnu.org/software/gdb/documentation/>.</span></span><br><span class="line"><span class="keyword">For</span> <span class="keyword">help</span>, <span class="keyword">type</span> <span class="string">"help"</span>.</span><br><span class="line"><span class="keyword">Type</span> <span class="string">"apropos word"</span> to <span class="keyword">search</span> <span class="keyword">for</span> commands related to <span class="string">"word"</span>...</span><br><span class="line">Reading symbols from /home/archerding/sigfpe...(<span class="keyword">no</span> debugging symbols found)...done.</span><br><span class="line">[New LWP 2722]</span><br><span class="line">Core was generated <span class="keyword">by</span> `./sigfpe'.</span><br><span class="line"><span class="keyword">Program</span> terminated with signal SIGFPE, Arithmetic exception.</span><br><span class="line">#0 0x000000000040050f <span class="keyword">in</span> calc ()</span><br><span class="line">(gdb) bt</span><br><span class="line">#0 0x000000000040050f <span class="keyword">in</span> calc ()</span><br><span class="line">#1 0x0000000000400528 <span class="keyword">in</span> main ()</span><br><span class="line">(gdb) i <span class="literal">r</span></span><br><span class="line">rax 0xa 10</span><br><span class="line">rbx 0x0 0</span><br><span class="line">rcx 0x0 0</span><br><span class="line">rdx 0x0 0</span><br><span class="line">rsi 0x7ffcb45b2198 140723334357400</span><br><span class="line">rdi 0xa 10</span><br><span class="line">rbp 0x7ffcb45b20a0 0x7ffcb45b20a0</span><br><span class="line">rsp 0x7ffcb45b20a0 0x7ffcb45b20a0</span><br><span class="line">r8 0x7ff8d052ddd0 140706623708624</span><br><span class="line">r9 0x7ff8d05489d0 140706623818192</span><br><span class="line">r10 0x833 2099</span><br><span class="line">r11 0x7ff8d0188950 140706619885904</span><br><span class="line">r12 0x400400 4195328</span><br><span class="line">r13 0x7ffcb45b2190 140723334357392</span><br><span class="line">r14 0x0 0</span><br><span class="line">r15 0x0 0</span><br><span class="line">rip 0x40050f 0x40050f <calc+25></span><br><span class="line">eflags 0x10246 [ PF ZF <span class="keyword">IF</span> RF ]</span><br><span class="line"><span class="keyword">cs</span> 0x33 51</span><br><span class="line">ss 0x2b 43</span><br><span class="line"><span class="keyword">ds</span> 0x0 0</span><br><span class="line">es 0x0 0</span><br><span class="line">fs 0x0 0</span><br><span class="line">---<span class="keyword">Type</span> <<span class="keyword">return</span>> to <span class="keyword">continue</span>, or q <<span class="keyword">return</span>> to quit---</span><br><span class="line">gs 0x0 0</span><br><span class="line">(gdb) disas</span><br><span class="line">Dump of assembler code <span class="keyword">for</span> function calc:</span><br><span class="line"> 0x00000000004004f6 <+0>: push %rbp</span><br><span class="line"> 0x00000000004004f7 <+1>: <span class="keyword">mov</span> %rsp,%rbp</span><br><span class="line"> 0x00000000004004fa <+4>: <span class="keyword">mov</span> %<span class="keyword">edi</span>,-0x14(%rbp)</span><br><span class="line"> 0x00000000004004fd <+7>: movl <span class="label">$0x0</span>,-0x8(%rbp)</span><br><span class="line"> 0x0000000000400504 <+14>: movl <span class="label">$0x0</span>,-0x4(%rbp)</span><br><span class="line"> 0x000000000040050b <+21>: <span class="keyword">mov</span> -0x14(%rbp),%eax</span><br><span class="line"> 0x000000000040050e <+24>: cltd </span><br><span class="line">=> 0x000000000040050f <+25>: idivl -0x8(%rbp)</span><br><span class="line"> 0x0000000000400512 <+28>: <span class="keyword">mov</span> %eax,-0x4(%rbp)</span><br><span class="line"> 0x0000000000400515 <+31>: <span class="keyword">mov</span> -0x4(%rbp),%eax</span><br><span class="line"> 0x0000000000400518 <+34>: pop %rbp</span><br><span class="line"> 0x0000000000400519 <+35>: retq </span><br><span class="line">End of assembler dump.</span><br><span class="line">(gdb) x <span class="label">$rbp</span>-0x8</span><br><span class="line">0x7ffcb45b2098: 0x00000000</span><br></pre></td></tr></table></figure>
<h3 id="SIGSEGV信号下的Core_dump解析">SIGSEGV信号下的Core dump解析</h3><p><code>SIGSEGV</code>信号表示进程进行了一次无效的存储访问,EGV表示段违例(segmentation violation);编写新的测试程序,尝试产生<code>SIGSEGV</code>信号;</p>
-<figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="preprocessor">#<span class="keyword">include</span> <stdlib.h></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">char</span> *str = <span class="string">"hello World!"</span>;</span><br><span class="line"> </span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">mod_str</span><span class="params">()</span></span><br><span class="line"></span>{</span><br><span class="line"> str[<span class="number">0</span>] = <span class="string">'H'</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span><br><span class="line"></span>{</span><br><span class="line"> mod_str();</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
+<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="preprocessor">#<span class="keyword">include</span> <stdlib.h></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">char</span> *str = <span class="string">"hello World!"</span>;</span><br><span class="line"> </span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">mod_str</span><span class="params">()</span></span><br><span class="line"></span>{</span><br><span class="line"> str[<span class="number">0</span>] = <span class="string">'H'</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span><br><span class="line"></span>{</span><br><span class="line"> mod_str();</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>编译执行,果真产生了core文件;</p>
<figure class="highlight elixir"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">archerding<span class="variable">@ubuntu</span><span class="symbol">:~</span><span class="variable">$ </span>gcc sigsegv.c -o sigsegv</span><br><span class="line">archerding<span class="variable">@ubuntu</span><span class="symbol">:~</span><span class="variable">$ </span>./sigsegv </span><br><span class="line"><span class="constant">Segmentation </span>fault (core dumped)</span><br><span class="line">archerding<span class="variable">@ubuntu</span><span class="symbol">:~</span><span class="variable">$ </span>ls /tmp/core/</span><br><span class="line">core-sigsegv.<span class="number">2856</span></span><br></pre></td></tr></table></figure>
<p>接下来开始解析这个core文件;错误提示<code>Program terminated with signal SIGSEGV, Segmentation fault.</code>;<br>使用<code>bt</code>打印栈信息,定位错误函数是<code>mod_str()</code>函数;<br>使用<code>i r</code>打印寄存器信息,发现在调用到汇编指令地址<code>rip 0x400509 0x400509 <mod_str+19></code>时出现异常;<br>使用<code>disas</code>反汇编问题函数,发现在调用<code>movb $0x48,(%rax)</code>时出错;<br>使用<code>x /16s $rax</code>打印错误地址指向的内存,发现改地址是<code>0x4005b4</code>指向了字符串<code>hello World!</code>;<br>使用<code>info proc map</code>查看内存映射,处于第一个区域内。</p>
@@ -373,6 +373,10 @@
+ <div class="links-of-author motion-element">
+
+ </div>
+
</div>
diff --git a/about/index.html b/about/index.html
index 49b5283..ada1b01 100644
--- a/about/index.html
+++ b/about/index.html
@@ -250,6 +250,10 @@
+ <div class="links-of-author motion-element">
+
+ </div>
+
</div>
diff --git a/archives/2015/05/index.html b/archives/2015/05/index.html
index 6df8798..6fd8d55 100644
--- a/archives/2015/05/index.html
+++ b/archives/2015/05/index.html
@@ -195,8 +195,70 @@
<div class="post-title">
- <a class="post-title-link" href="/2015/05/29/javascript-note-01/">
- JavaScript学习笔记-数组
+ <a class="post-title-link" href="/2015/05/29/netmapping-01/">
+ 分布式端口映射NetMapping的设计与实现
+ </a>
+
+ </div>
+
+ <div class="post-meta">
+ <span class="post-time"> 05-29 </span>
+ </div>
+
+ </div>
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div class="post post-type-normal">
+ <div class="post-header">
+
+ <div class="post-title">
+
+ <a class="post-title-link" href="/2015/05/29/javascript-note-05/">
+ JavaScript学习笔记-栈
+ </a>
+
+ </div>
+
+ <div class="post-meta">
+ <span class="post-time"> 05-29 </span>
+ </div>
+
+ </div>
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div class="post post-type-normal">
+ <div class="post-header">
+
+ <div class="post-title">
+
+ <a class="post-title-link" href="/2015/05/29/javascript-note-04/">
+ JavaScript学习笔记-列表
</a>
</div>
@@ -288,70 +350,8 @@
<div class="post-title">
- <a class="post-title-link" href="/2015/05/29/javascript-note-04/">
- JavaScript学习笔记-列表
- </a>
-
- </div>
-
- <div class="post-meta">
- <span class="post-time"> 05-29 </span>
- </div>
-
- </div>
- </div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <div class="post post-type-normal">
- <div class="post-header">
-
- <div class="post-title">
-
- <a class="post-title-link" href="/2015/05/29/javascript-note-05/">
- JavaScript学习笔记-栈
- </a>
-
- </div>
-
- <div class="post-meta">
- <span class="post-time"> 05-29 </span>
- </div>
-
- </div>
- </div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <div class="post post-type-normal">
- <div class="post-header">
-
- <div class="post-title">
-
- <a class="post-title-link" href="/2015/05/29/netmapping-01/">
- 分布式端口映射NetMapping的设计与实现
+ <a class="post-title-link" href="/2015/05/29/javascript-note-01/">
+ JavaScript学习笔记-数组
</a>
</div>
@@ -446,6 +446,10 @@
+ <div class="links-of-author motion-element">
+
+ </div>
+
</div>
diff --git a/archives/2015/06/index.html b/archives/2015/06/index.html
index 085361a..4f7dd83 100644
--- a/archives/2015/06/index.html
+++ b/archives/2015/06/index.html
@@ -322,6 +322,10 @@
+ <div class="links-of-author motion-element">
+
+ </div>
+
</div>
diff --git a/archives/2015/index.html b/archives/2015/index.html
index 0d33c4c..2f01fa8 100644
--- a/archives/2015/index.html
+++ b/archives/2015/index.html
@@ -257,8 +257,70 @@
<div class="post-title">
- <a class="post-title-link" href="/2015/05/29/javascript-note-01/">
- JavaScript学习笔记-数组
+ <a class="post-title-link" href="/2015/05/29/netmapping-01/">
+ 分布式端口映射NetMapping的设计与实现
+ </a>
+
+ </div>
+
+ <div class="post-meta">
+ <span class="post-time"> 05-29 </span>
+ </div>
+
+ </div>
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div class="post post-type-normal">
+ <div class="post-header">
+
+ <div class="post-title">
+
+ <a class="post-title-link" href="/2015/05/29/javascript-note-05/">
+ JavaScript学习笔记-栈
+ </a>
+
+ </div>
+
+ <div class="post-meta">
+ <span class="post-time"> 05-29 </span>
+ </div>
+
+ </div>
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div class="post post-type-normal">
+ <div class="post-header">
+
+ <div class="post-title">
+
+ <a class="post-title-link" href="/2015/05/29/javascript-note-04/">
+ JavaScript学习笔记-列表
</a>
</div>
@@ -350,70 +412,8 @@
<div class="post-title">
- <a class="post-title-link" href="/2015/05/29/javascript-note-04/">
- JavaScript学习笔记-列表
- </a>
-
- </div>
-
- <div class="post-meta">
- <span class="post-time"> 05-29 </span>
- </div>
-
- </div>
- </div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <div class="post post-type-normal">
- <div class="post-header">
-
- <div class="post-title">
-
- <a class="post-title-link" href="/2015/05/29/javascript-note-05/">
- JavaScript学习笔记-栈
- </a>
-
- </div>
-
- <div class="post-meta">
- <span class="post-time"> 05-29 </span>
- </div>
-
- </div>
- </div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <div class="post post-type-normal">
- <div class="post-header">
-
- <div class="post-title">
-
- <a class="post-title-link" href="/2015/05/29/netmapping-01/">
- 分布式端口映射NetMapping的设计与实现
+ <a class="post-title-link" href="/2015/05/29/javascript-note-01/">
+ JavaScript学习笔记-数组
</a>
</div>
@@ -508,6 +508,10 @@
+ <div class="links-of-author motion-element">
+
+ </div>
+
</div>
diff --git a/archives/index.html b/archives/index.html
index 0d33c4c..2f01fa8 100644
--- a/archives/index.html
+++ b/archives/index.html
@@ -257,8 +257,70 @@
<div class="post-title">
- <a class="post-title-link" href="/2015/05/29/javascript-note-01/">
- JavaScript学习笔记-数组
+ <a class="post-title-link" href="/2015/05/29/netmapping-01/">
+ 分布式端口映射NetMapping的设计与实现
+ </a>
+
+ </div>
+
+ <div class="post-meta">
+ <span class="post-time"> 05-29 </span>
+ </div>
+
+ </div>
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div class="post post-type-normal">
+ <div class="post-header">
+
+ <div class="post-title">
+
+ <a class="post-title-link" href="/2015/05/29/javascript-note-05/">
+ JavaScript学习笔记-栈
+ </a>
+
+ </div>
+
+ <div class="post-meta">
+ <span class="post-time"> 05-29 </span>
+ </div>
+
+ </div>
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div class="post post-type-normal">
+ <div class="post-header">
+
+ <div class="post-title">
+
+ <a class="post-title-link" href="/2015/05/29/javascript-note-04/">
+ JavaScript学习笔记-列表
</a>
</div>
@@ -350,70 +412,8 @@
<div class="post-title">
- <a class="post-title-link" href="/2015/05/29/javascript-note-04/">
- JavaScript学习笔记-列表
- </a>
-
- </div>
-
- <div class="post-meta">
- <span class="post-time"> 05-29 </span>
- </div>
-
- </div>
- </div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <div class="post post-type-normal">
- <div class="post-header">
-
- <div class="post-title">
-
- <a class="post-title-link" href="/2015/05/29/javascript-note-05/">
- JavaScript学习笔记-栈
- </a>
-
- </div>
-
- <div class="post-meta">
- <span class="post-time"> 05-29 </span>
- </div>
-
- </div>
- </div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <div class="post post-type-normal">
- <div class="post-header">
-
- <div class="post-title">
-
- <a class="post-title-link" href="/2015/05/29/netmapping-01/">
- 分布式端口映射NetMapping的设计与实现
+ <a class="post-title-link" href="/2015/05/29/javascript-note-01/">
+ JavaScript学习笔记-数组
</a>
</div>
@@ -508,6 +508,10 @@
+ <div class="links-of-author motion-element">
+
+ </div>
+
</div>
diff --git a/categories/Golang/index.html b/categories/Golang/index.html
index 3f44f0d..78c01fc 100644
--- a/categories/Golang/index.html
+++ b/categories/Golang/index.html
@@ -272,6 +272,10 @@
+ <div class="links-of-author motion-element">
+
+ </div>
+
</div>
diff --git a/categories/JavaScript/index.html b/categories/JavaScript/index.html
index 219a07b..8704b19 100644
--- a/categories/JavaScript/index.html
+++ b/categories/JavaScript/index.html
@@ -178,8 +178,30 @@
<div class="post-title">
- <a class="post-title-link" href="/2015/05/29/javascript-note-01/">
- JavaScript学习笔记-数组
+ <a class="post-title-link" href="/2015/05/29/javascript-note-05/">
+ JavaScript学习笔记-栈
+ </a>
+
+ </div>
+
+ <div class="post-meta">
+ <span class="post-time"> 05-29 </span>
+ </div>
+
+ </div>
+ </div>
+
+
+
+
+
+ <div class="post post-type-normal">
+ <div class="post-header">
+
+ <div class="post-title">
+
+ <a class="post-title-link" href="/2015/05/29/javascript-note-04/">
+ JavaScript学习笔记-列表
</a>
</div>
@@ -244,30 +266,8 @@
<div class="post-title">
- <a class="post-title-link" href="/2015/05/29/javascript-note-04/">
- JavaScript学习笔记-列表
- </a>
-
- </div>
-
- <div class="post-meta">
- <span class="post-time"> 05-29 </span>
- </div>
-
- </div>
- </div>
-
-
-
-
-
- <div class="post post-type-normal">
- <div class="post-header">
-
- <div class="post-title">
-
- <a class="post-title-link" href="/2015/05/29/javascript-note-05/">
- JavaScript学习笔记-栈
+ <a class="post-title-link" href="/2015/05/29/javascript-note-01/">
+ JavaScript学习笔记-数组
</a>
</div>
@@ -360,6 +360,10 @@
+ <div class="links-of-author motion-element">
+
+ </div>
+
</div>
diff --git a/categories/coredump/index.html b/categories/coredump/index.html
index 2ce4106..19dd8fe 100644
--- a/categories/coredump/index.html
+++ b/categories/coredump/index.html
@@ -294,6 +294,10 @@
+ <div class="links-of-author motion-element">
+
+ </div>
+
</div>
diff --git a/categories/index.html b/categories/index.html
index 2e72c08..d286252 100644
--- a/categories/index.html
+++ b/categories/index.html
@@ -257,6 +257,10 @@
+ <div class="links-of-author motion-element">
+
+ </div>
+
</div>
diff --git a/css/main.css b/css/main.css
index 29e61db..b9a1bfc 100644
--- a/css/main.css
+++ b/css/main.css
@@ -1167,7 +1167,7 @@
width: 4px;
height: 4px;
border-radius: 50%;
- background: #34ffed;
+ background: #ff615e;
}
.sidebar-nav {
margin: 0;
diff --git a/index.html b/index.html
index 00c83c4..32a99f3 100644
--- a/index.html
+++ b/index.html
@@ -340,8 +340,89 @@
- <a class="post-title-link" href="/2015/05/29/javascript-note-01/">
- JavaScript学习笔记-数组
+ <a class="post-title-link" href="/2015/05/29/netmapping-01/">
+ 分布式端口映射NetMapping的设计与实现
+ </a>
+
+
+ </h1>
+
+
+ <div class="post-meta">
+ <span class="post-time">
+ 发表于 2015-05-29
+ </span>
+
+
+ <span class="post-category">
+ | 分类于
+
+ <a href="/categories/Golang/">Golang</a>
+
+
+
+
+
+ </span>
+
+
+
+
+ <span class="post-comments-count">
+ |
+ <a href="/2015/05/29/netmapping-01/#comments" >
+ <span class="post-comments-count ds-thread-count" data-thread-key="2015/05/29/netmapping-01/"></span>
+ </a>
+ </span>
+
+
+ </div>
+ </div>
+
+ <div class="post-body">
+
+
+
+
+
+
+ <h4 id="架构设计">架构设计</h4><p><img src="/images/netmapping-01/NetMapping.png" alt="这是一张图片"><br><img src="/images/netmapping-01/UseCase.png" alt="这是一张图片"><br>
+ <div class="post-more-link text-center">
+ <a class="btn" href="/2015/05/29/netmapping-01/#more">
+ 阅读全文 »
+ </a>
+ </div>
+
+
+ </div>
+
+ <div class="post-footer">
+
+
+
+
+
+
+ <div class="post-eof"></div>
+
+ </div>
+ </div>
+
+
+
+
+
+ <div class="post post-type-normal ">
+ <div class="post-header">
+
+
+
+ <h1 class="post-title">
+
+
+
+ <a class="post-title-link" href="/2015/05/29/javascript-note-05/">
+ JavaScript学习笔记-栈
</a>
@@ -370,8 +451,8 @@
<span class="post-comments-count">
|
- <a href="/2015/05/29/javascript-note-01/#comments" >
- <span class="post-comments-count ds-thread-count" data-thread-key="2015/05/29/javascript-note-01/"></span>
+ <a href="/2015/05/29/javascript-note-05/#comments" >
+ <span class="post-comments-count ds-thread-count" data-thread-key="2015/05/29/javascript-note-05/"></span>
</a>
</span>
@@ -386,11 +467,18 @@
- <h3 id="什么是数组">什么是数组</h3><p>通常数组是一种线性结构,但是JavaScript中的数组是一个<strong>特殊的对象</strong>,其索引值在内部被转换成字符串处理。</p>
-<h3 id="创建数组">创建数组</h3><figure class="highlight smali"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">var<span class="instruction"> array </span>= <span class="keyword">[</span>]; //length = 0</span><br><span class="line">var<span class="instruction"> array </span>= <span class="keyword">[</span>10]; //length = 1</span><br><span class="line">var<span class="instruction"> array </span>= <span class="keyword">[</span>1,2,3,4,5];//length = 5</span><br><span class="line">var<span class="instruction"> array </span>=<span class="instruction"> new </span>Array(<span class="function">)</span>; //length = 0</span><br><span class="line">var<span class="instruction"> array </span>=<span class="instruction"> new </span>Array(10<span class="function">)</span>; //length = 10</span><br><span class="line">var<span class="instruction"> array </span>=<span class="instruction"> new </span>Array(1,2,3,4,6<span class="function">)</span>; //length = 5</span><br></pre></td></tr></table></figure>
-<p><em>使用[]创建数组的效率高,因为字符少。</em></p>
+ <h3 id="什么是栈">什么是栈</h3><p>栈是一种被称为后入先出(LIFO,last in first out)的数据结构.是一个特殊的列表,栈内的元素只能通过一端访问,这个端被称为栈顶.</p>
+<h3 id="如何定义栈">如何定义栈</h3><ul>
+<li>方法:将一个元素压入栈push(element)</li>
+<li>方法:将一个元素弹出栈pop()->element 被弹出的元素从栈中永久性删除</li>
+<li>方法:预览栈顶元素peek()->element 只返回栈顶元素,不删除该元素</li>
+<li>方法:清除栈内所有元素clear() 可以将top=0快速清空栈</li>
+<li>方法:栈内元素的个数:length()->number //可以使用top获取</li>
+<li>属性:栈顶元素位置number:top</li>
+<li>属性:栈内是否有元素boolean:empty //可以使用top=0进行判断,</li>
+</ul>
<div class="post-more-link text-center">
- <a class="btn" href="/2015/05/29/javascript-note-01/#more">
+ <a class="btn" href="/2015/05/29/javascript-note-05/#more">
阅读全文 »
</a>
</div>
@@ -423,6 +511,82 @@
+ <a class="post-title-link" href="/2015/05/29/javascript-note-04/">
+ JavaScript学习笔记-列表
+ </a>
+
+
+ </h1>
+
+
+ <div class="post-meta">
+ <span class="post-time">
+ 发表于 2015-05-29
+ </span>
+
+
+ <span class="post-category">
+ | 分类于
+
+ <a href="/categories/JavaScript/">JavaScript</a>
+
+
+
+
+
+ </span>
+
+
+
+
+ <span class="post-comments-count">
+ |
+ <a href="/2015/05/29/javascript-note-04/#comments" >
+ <span class="post-comments-count ds-thread-count" data-thread-key="2015/05/29/javascript-note-04/"></span>
+ </a>
+ </span>
+
+
+ </div>
+ </div>
+
+ <div class="post-body">
+
+
+
+
+
+
+ <h4 id="JavaScript学习笔记-列表">JavaScript学习笔记-列表</h4><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">List</span>(<span class="params"></span>)</span>{</span><br><span class="line"> <span class="keyword">this</span>.listSize = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">this</span>.pos = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">this</span>.dataStore = [];</span><br><span class="line"> <span class="keyword">this</span>.clear = clear;</span><br><span class="line"> <span class="keyword">this</span>.find = find;</span><br><span class="line"> <span class="keyword">this</span>.toString = toString;</span><br><span class="line"> <span class="keyword">this</span>.insert = insert;</span><br><span class="line"> <span class="keyword">this</span>.append = append;</span><br><span class="line"> <span class="keyword">this</span>.remove = remove;</span><br><span class="line"> <span class="keyword">this</span>.front = front;</span><br><span class="line"> <span class="keyword">this</span>.end = end;</span><br><span class="line"> <span class="keyword">this</span>.prev = prev;</span><br><span class="line"> <span class="keyword">this</span>.next = next;</span><br><span class="line"> <span class="keyword">this</span>.length = length;</span><br><span class="line"> <span class="keyword">this</span>.currPos = currPos;</span><br><span class="line"> <span class="keyword">this</span>.moveTo = moveTo;</span><br><span class="line"> <span class="keyword">this</span>.getElement = getElement;</span><br><span class="line"> <span class="keyword">this</span>.contains = contains;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">clear</span>(<span class="params">element</span>)</span>{</span><br><span class="line"> <span class="keyword">delete</span> <span class="keyword">this</span>.dataStore;</span><br><span class="line"> <span class="keyword">this</span>.dataStore = [];</span><br><span class="line"> <span class="keyword">this</span>.listSize = <span class="keyword">this</span>.pos = <span class="number">0</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">insert</span>(<span class="params">element,after</span>)</span>{</span><br><span class="line"> <span class="keyword">var</span> index = <span class="keyword">this</span>.find(element);</span><br><span class="line"> <span class="keyword">if</span>(index > -<span class="number">1</span>){</span><br><span class="line"> <span class="keyword">this</span>.dataStore.splice(index + <span class="number">1</span>, <span class="number">0</span>, element);</span><br><span class="line"> ++<span class="keyword">this</span>.listSize;</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">front</span>(<span class="params"></span>)</span>{</span><br><span class="line"> <span class="keyword">this</span>.pos = <span class="number">0</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">end</span>(<span class="params"></span>)</span>{</span><br><span class="line"> <span class="keyword">this</span>.pos = <span class="keyword">this</span>.listSize - <span class="number">1</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">prev</span>(<span class="params"></span>)</span>{</span><br><span class="line"> --<span class="keyword">this</span>.pos;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">next</span>(<span class="params">element</span>)</span>{</span><br><span class="line"> ++<span class="keyword">this</span>.pos;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">currPos</span>(<span class="params"></span>)</span>{</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">this</span>.pos;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">moveTo</span>(<span class="params">position</span>)</span>{</span><br><span class="line"> <span class="keyword">this</span>.pos = position;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">getElement</span>(<span class="params"></span>)</span>{</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">this</span>.dataStore[<span class="keyword">this</span>.pos];</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">contains</span>(<span class="params">element</span>)</span>{</span><br><span class="line"> <span class="keyword">if</span>(<span class="keyword">this</span>.find(element) > -<span class="number">1</span>)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">find</span>(<span class="params">element</span>)</span>{</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">this</span>.dataStore.indexOf(element);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">append</span>(<span class="params">element</span>)</span>{</span><br><span class="line"> <span class="keyword">this</span>.dataStore[<span class="keyword">this</span>.listSize++] = element;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">remove</span>(<span class="params">element</span>)</span>{</span><br><span class="line"> <span class="keyword">var</span> index = <span class="keyword">this</span>.find(element);</span><br><span class="line"> <span class="keyword">if</span>(index > -<span class="number">1</span>){</span><br><span class="line"> <span class="keyword">this</span>.dataStore.splice(index,<span class="number">1</span>);</span><br><span class="line"> --<span class="keyword">this</span>.listSize;</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">length</span>(<span class="params"></span>)</span>{</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">this</span>.listSize;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">toString</span>(<span class="params"></span>)</span>{</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">this</span>.dataStore;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">var</span> names = <span class="keyword">new</span> List();</span><br><span class="line">names.append(<span class="string">"Clayton"</span>);</span><br><span class="line">names.append(<span class="string">"Raymond"</span>);</span><br><span class="line">names.append(<span class="string">"Cynthia"</span>);</span><br><span class="line">names.append(<span class="string">"Jennifer"</span>);</span><br><span class="line">names.append(<span class="string">"Bryan"</span>);</span><br><span class="line">names.append(<span class="string">"Danny"</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span>(names.front(); names.currPos() < names.length(); names.next()) {</span><br><span class="line"> <span class="built_in">console</span>.log(names.getElement());</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span>(names.end(); names.currPos() >= <span class="number">0</span>; names.prev()) {</span><br><span class="line"> <span class="built_in">console</span>.log(names.getElement());</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
+
+
+ </div>
+
+ <div class="post-footer">
+
+
+
+
+
+
+ <div class="post-eof"></div>
+
+ </div>
+ </div>
+
+
+
+
+
+ <div class="post post-type-normal ">
+ <div class="post-header">
+
+
+
+ <h1 class="post-title">
+
+
+
<a class="post-title-link" href="/2015/05/29/javascript-note-03/">
JavaScript学习笔记-数组练习题
</a>
@@ -551,7 +715,7 @@
<h3 id="二维数组">二维数组</h3><p>JavaScript只支持一维数组,但是通过在数组里保存数组元素的方式,可以轻松创建多维<br>数组。</p>
-<h3 id="创建二维数组">创建二维数组</h3><figure class="highlight inform7"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">var twod = <span class="comment">[]</span>;</span><br><span class="line">var rows = 5;</span><br><span class="line">for (var i = 0; i < rows; ++i) {</span><br><span class="line"> twod<span class="comment">[i]</span> = <span class="comment">[]</span>;</span><br><span class="line">}</span><br><span class="line">console.log(twod);//<span class="comment">[ <span class="comment">[]</span>, <span class="comment">[]</span>, <span class="comment">[]</span>, <span class="comment">[]</span>, <span class="comment">[]</span> ]</span></span><br></pre></td></tr></table></figure>
+<h3 id="创建二维数组">创建二维数组</h3><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> twod = [];</span><br><span class="line"><span class="keyword">var</span> rows = <span class="number">5</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">var</span> i = <span class="number">0</span>; i < rows; ++i) {</span><br><span class="line"> twod[i] = [];</span><br><span class="line">}</span><br><span class="line"><span class="built_in">console</span>.log(twod);<span class="comment">//[ [], [], [], [], [] ]</span></span><br></pre></td></tr></table></figure>
<div class="post-more-link text-center">
<a class="btn" href="/2015/05/29/javascript-note-02/#more">
阅读全文 »
@@ -586,8 +750,8 @@
- <a class="post-title-link" href="/2015/05/29/javascript-note-04/">
- JavaScript学习笔记-列表
+ <a class="post-title-link" href="/2015/05/29/javascript-note-01/">
+ JavaScript学习笔记-数组
</a>
@@ -616,8 +780,8 @@
<span class="post-comments-count">
|
- <a href="/2015/05/29/javascript-note-04/#comments" >
- <span class="post-comments-count ds-thread-count" data-thread-key="2015/05/29/javascript-note-04/"></span>
+ <a href="/2015/05/29/javascript-note-01/#comments" >
+ <span class="post-comments-count ds-thread-count" data-thread-key="2015/05/29/javascript-note-01/"></span>
</a>
</span>
@@ -632,175 +796,11 @@
- <h4 id="JavaScript学习笔记-列表">JavaScript学习笔记-列表</h4><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">List</span>(<span class="params"></span>)</span>{</span><br><span class="line"> <span class="keyword">this</span>.listSize = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">this</span>.pos = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">this</span>.dataStore = [];</span><br><span class="line"> <span class="keyword">this</span>.clear = clear;</span><br><span class="line"> <span class="keyword">this</span>.find = find;</span><br><span class="line"> <span class="keyword">this</span>.toString = toString;</span><br><span class="line"> <span class="keyword">this</span>.insert = insert;</span><br><span class="line"> <span class="keyword">this</span>.append = append;</span><br><span class="line"> <span class="keyword">this</span>.remove = remove;</span><br><span class="line"> <span class="keyword">this</span>.front = front;</span><br><span class="line"> <span class="keyword">this</span>.end = end;</span><br><span class="line"> <span class="keyword">this</span>.prev = prev;</span><br><span class="line"> <span class="keyword">this</span>.next = next;</span><br><span class="line"> <span class="keyword">this</span>.length = length;</span><br><span class="line"> <span class="keyword">this</span>.currPos = currPos;</span><br><span class="line"> <span class="keyword">this</span>.moveTo = moveTo;</span><br><span class="line"> <span class="keyword">this</span>.getElement = getElement;</span><br><span class="line"> <span class="keyword">this</span>.contains = contains;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">clear</span>(<span class="params">element</span>)</span>{</span><br><span class="line"> <span class="keyword">delete</span> <span class="keyword">this</span>.dataStore;</span><br><span class="line"> <span class="keyword">this</span>.dataStore = [];</span><br><span class="line"> <span class="keyword">this</span>.listSize = <span class="keyword">this</span>.pos = <span class="number">0</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">insert</span>(<span class="params">element,after</span>)</span>{</span><br><span class="line"> <span class="keyword">var</span> index = <span class="keyword">this</span>.find(element);</span><br><span class="line"> <span class="keyword">if</span>(index > -<span class="number">1</span>){</span><br><span class="line"> <span class="keyword">this</span>.dataStore.splice(index + <span class="number">1</span>, <span class="number">0</span>, element);</span><br><span class="line"> ++<span class="keyword">this</span>.listSize;</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">front</span>(<span class="params"></span>)</span>{</span><br><span class="line"> <span class="keyword">this</span>.pos = <span class="number">0</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">end</span>(<span class="params"></span>)</span>{</span><br><span class="line"> <span class="keyword">this</span>.pos = <span class="keyword">this</span>.listSize - <span class="number">1</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">prev</span>(<span class="params"></span>)</span>{</span><br><span class="line"> --<span class="keyword">this</span>.pos;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">next</span>(<span class="params">element</span>)</span>{</span><br><span class="line"> ++<span class="keyword">this</span>.pos;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">currPos</span>(<span class="params"></span>)</span>{</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">this</span>.pos;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">moveTo</span>(<span class="params">position</span>)</span>{</span><br><span class="line"> <span class="keyword">this</span>.pos = position;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">getElement</span>(<span class="params"></span>)</span>{</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">this</span>.dataStore[<span class="keyword">this</span>.pos];</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">contains</span>(<span class="params">element</span>)</span>{</span><br><span class="line"> <span class="keyword">if</span>(<span class="keyword">this</span>.find(element) > -<span class="number">1</span>)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">find</span>(<span class="params">element</span>)</span>{</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">this</span>.dataStore.indexOf(element);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">append</span>(<span class="params">element</span>)</span>{</span><br><span class="line"> <span class="keyword">this</span>.dataStore[<span class="keyword">this</span>.listSize++] = element;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">remove</span>(<span class="params">element</span>)</span>{</span><br><span class="line"> <span class="keyword">var</span> index = <span class="keyword">this</span>.find(element);</span><br><span class="line"> <span class="keyword">if</span>(index > -<span class="number">1</span>){</span><br><span class="line"> <span class="keyword">this</span>.dataStore.splice(index,<span class="number">1</span>);</span><br><span class="line"> --<span class="keyword">this</span>.listSize;</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">length</span>(<span class="params"></span>)</span>{</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">this</span>.listSize;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">toString</span>(<span class="params"></span>)</span>{</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">this</span>.dataStore;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">var</span> names = <span class="keyword">new</span> List();</span><br><span class="line">names.append(<span class="string">"Clayton"</span>);</span><br><span class="line">names.append(<span class="string">"Raymond"</span>);</span><br><span class="line">names.append(<span class="string">"Cynthia"</span>);</span><br><span class="line">names.append(<span class="string">"Jennifer"</span>);</span><br><span class="line">names.append(<span class="string">"Bryan"</span>);</span><br><span class="line">names.append(<span class="string">"Danny"</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span>(names.front(); names.currPos() < names.length(); names.next()) {</span><br><span class="line"> <span class="built_in">console</span>.log(names.getElement());</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span>(names.end(); names.currPos() >= <span class="number">0</span>; names.prev()) {</span><br><span class="line"> <span class="built_in">console</span>.log(names.getElement());</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
-
-
- </div>
-
- <div class="post-footer">
-
-
-
-
-
-
- <div class="post-eof"></div>
-
- </div>
- </div>
-
-
-
-
-
- <div class="post post-type-normal ">
- <div class="post-header">
-
-
-
- <h1 class="post-title">
-
-
-
- <a class="post-title-link" href="/2015/05/29/javascript-note-05/">
- JavaScript学习笔记-栈
- </a>
-
-
- </h1>
-
-
- <div class="post-meta">
- <span class="post-time">
- 发表于 2015-05-29
- </span>
-
-
- <span class="post-category">
- | 分类于
-
- <a href="/categories/JavaScript/">JavaScript</a>
-
-
-
-
-
- </span>
-
-
-
-
- <span class="post-comments-count">
- |
- <a href="/2015/05/29/javascript-note-05/#comments" >
- <span class="post-comments-count ds-thread-count" data-thread-key="2015/05/29/javascript-note-05/"></span>
- </a>
- </span>
-
-
- </div>
- </div>
-
- <div class="post-body">
-
-
-
-
-
-
- <h3 id="什么是栈">什么是栈</h3><p>栈是一种被称为后入先出(LIFO,last in first out)的数据结构.是一个特殊的列表,栈内的元素只能通过一端访问,这个端被称为栈顶.</p>
-<h3 id="如何定义栈">如何定义栈</h3><ul>
-<li>方法:将一个元素压入栈push(element)</li>
-<li>方法:将一个元素弹出栈pop()->element 被弹出的元素从栈中永久性删除</li>
-<li>方法:预览栈顶元素peek()->element 只返回栈顶元素,不删除该元素</li>
-<li>方法:清除栈内所有元素clear() 可以将top=0快速清空栈</li>
-<li>方法:栈内元素的个数:length()->number //可以使用top获取</li>
-<li>属性:栈顶元素位置number:top</li>
-<li>属性:栈内是否有元素boolean:empty //可以使用top=0进行判断,</li>
-</ul>
+ <h3 id="什么是数组">什么是数组</h3><p>通常数组是一种线性结构,但是JavaScript中的数组是一个<strong>特殊的对象</strong>,其索引值在内部被转换成字符串处理。</p>
+<h3 id="创建数组">创建数组</h3><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> array = []; <span class="comment">//length = 0</span></span><br><span class="line"><span class="keyword">var</span> array = [<span class="number">10</span>]; <span class="comment">//length = 1</span></span><br><span class="line"><span class="keyword">var</span> array = [<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">5</span>];<span class="comment">//length = 5</span></span><br><span class="line"><span class="keyword">var</span> array = <span class="keyword">new</span> <span class="built_in">Array</span>(); <span class="comment">//length = 0</span></span><br><span class="line"><span class="keyword">var</span> array = <span class="keyword">new</span> <span class="built_in">Array</span>(<span class="number">10</span>); <span class="comment">//length = 10</span></span><br><span class="line"><span class="keyword">var</span> array = <span class="keyword">new</span> <span class="built_in">Array</span>(<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">6</span>); <span class="comment">//length = 5</span></span><br></pre></td></tr></table></figure>
+<p><em>使用[]创建数组的效率高,因为字符少。</em></p>
<div class="post-more-link text-center">
- <a class="btn" href="/2015/05/29/javascript-note-05/#more">
- 阅读全文 »
- </a>
- </div>
-
-
- </div>
-
- <div class="post-footer">
-
-
-
-
-
-
- <div class="post-eof"></div>
-
- </div>
- </div>
-
-
-
-
-
- <div class="post post-type-normal ">
- <div class="post-header">
-
-
-
- <h1 class="post-title">
-
-
-
- <a class="post-title-link" href="/2015/05/29/netmapping-01/">
- 分布式端口映射NetMapping的设计与实现
- </a>
-
-
- </h1>
-
-
- <div class="post-meta">
- <span class="post-time">
- 发表于 2015-05-29
- </span>
-
-
- <span class="post-category">
- | 分类于
-
- <a href="/categories/Golang/">Golang</a>
-
-
-
-
-
- </span>
-
-
-
-
- <span class="post-comments-count">
- |
- <a href="/2015/05/29/netmapping-01/#comments" >
- <span class="post-comments-count ds-thread-count" data-thread-key="2015/05/29/netmapping-01/"></span>
- </a>
- </span>
-
-
- </div>
- </div>
-
- <div class="post-body">
-
-
-
-
-
-
- <h4 id="架构设计">架构设计</h4><p><img src="/images/netmapping-01/NetMapping.png" alt="这是一张图片"><br><img src="/images/netmapping-01/UseCase.png" alt="这是一张图片"><br>
- <div class="post-more-link text-center">
- <a class="btn" href="/2015/05/29/netmapping-01/#more">
+ <a class="btn" href="/2015/05/29/javascript-note-01/#more">
阅读全文 »
</a>
</div>
@@ -900,6 +900,10 @@
+ <div class="links-of-author motion-element">
+
+ </div>
+
</div>
diff --git a/tags/Golang/index.html b/tags/Golang/index.html
index 13bd9e8..fc162f2 100644
--- a/tags/Golang/index.html
+++ b/tags/Golang/index.html
@@ -271,6 +271,10 @@
+ <div class="links-of-author motion-element">
+
+ </div>
+
</div>
diff --git a/tags/JavaScript/index.html b/tags/JavaScript/index.html
index a69f5d5..2bb0d47 100644
--- a/tags/JavaScript/index.html
+++ b/tags/JavaScript/index.html
@@ -178,8 +178,30 @@
<div class="post-title">
- <a class="post-title-link" href="/2015/05/29/javascript-note-01/">
- JavaScript学习笔记-数组
+ <a class="post-title-link" href="/2015/05/29/javascript-note-05/">
+ JavaScript学习笔记-栈
+ </a>
+
+ </div>
+
+ <div class="post-meta">
+ <span class="post-time"> 05-29 </span>
+ </div>
+
+ </div>
+ </div>
+
+
+
+
+
+ <div class="post post-type-normal">
+ <div class="post-header">
+
+ <div class="post-title">
+
+ <a class="post-title-link" href="/2015/05/29/javascript-note-04/">
+ JavaScript学习笔记-列表
</a>
</div>
@@ -244,30 +266,8 @@
<div class="post-title">
- <a class="post-title-link" href="/2015/05/29/javascript-note-04/">
- JavaScript学习笔记-列表
- </a>
-
- </div>
-
- <div class="post-meta">
- <span class="post-time"> 05-29 </span>
- </div>
-
- </div>
- </div>
-
-
-
-
-
- <div class="post post-type-normal">
- <div class="post-header">
-
- <div class="post-title">
-
- <a class="post-title-link" href="/2015/05/29/javascript-note-05/">
- JavaScript学习笔记-栈
+ <a class="post-title-link" href="/2015/05/29/javascript-note-01/">
+ JavaScript学习笔记-数组
</a>
</div>
@@ -359,6 +359,10 @@
+ <div class="links-of-author motion-element">
+
+ </div>
+
</div>
diff --git a/tags/coredump/index.html b/tags/coredump/index.html
index b6ef81b..acba6ab 100644
--- a/tags/coredump/index.html
+++ b/tags/coredump/index.html
@@ -293,6 +293,10 @@
+ <div class="links-of-author motion-element">
+
+ </div>
+
</div>
diff --git a/tags/index.html b/tags/index.html
index 82de21f..50048cb 100644
--- a/tags/index.html
+++ b/tags/index.html
@@ -257,6 +257,10 @@
+ <div class="links-of-author motion-element">
+
+ </div>
+
</div>