❶ js怎麼往日誌上列印堆棧
一 看一下它們的性質,這種性質決定了它們的使用場合
隊列:是一種支持內先進先出(FIFO)的集合,即先被插容入的數據,先被取出!
堆棧:是一種支持後進先出(LIFO)的集合,即後被插入的數據,先被取出!
二 看一下實現的代碼(JS代碼)
var a=new Array();
a.unshift(1);
a.unshift(2);
a.unshift(3);
a.unshift(4);
console.log("先進先出")
a.pop()
var a=new Array();
a.push(1);
a.push(2);
❷ 有哪些用 JavaScript 實現的圖形庫
JS圖形、圖標庫推薦:
1. JS Charts
JS Charts 是個基於JavaScript的圖表生成器,不需要任何編碼。JS Charts 非常容易使用,只要用戶使用客戶端腳本(比如,在 web 瀏覽器中執行)。它不需要多餘的插件和伺服器模塊,只需要下載 JS Charts 的腳本,准備好 XML,JSON 或者 JavaScript 數組數據。
2. Canvasjs
CanvasJS 是個易用的 HTML5 & JavaScript 圖表庫,基於 Canvas 元素。Graphs 可以通過設備渲染,包括 iPhone,iPad,Android,Windows Phone,Microsoft Surface,Desktops 等等。它允許用戶創建適用於所有設備,不影響 web 應用程序的功能和可維護性的富儀表盤。CanvcasJS 有著非常漂亮的主題和超過傳統的 Flash 和 SVG 圖表 10x 倍以上的速度——生成輕量級,漂亮和響應式的儀表圖。
3. Chart.js
Chart.js 是個簡單的,面向對象的客戶端圖形庫,用戶可以用 6 中不同的方式來可視化數據。每個方式都是動畫效果的,完全自定義,而且看起來非常好看,即使在 retina 顯示。它使用 HTML5 canvas 元素,支持所有現代瀏覽器,並且支持 IE7/8。
4. Aristochart
Aristochart 是個高度自定義,靈活的折線 Canvas 圖表庫,允許用戶集中精力在圖表的審美方面,後台工作做得非常好。Aristochart 有個持續進步的社區,提供許多不斷增長的主題給用戶選擇。
5. xCharts
xCharts 是一個使用 D3.js 來構建漂亮的可定製的數據驅動的 JavaScript圖表庫,他使用HTML,CSS,SVG實現圖表,xCharts 被設計為一個動態的、流暢的、開放的和可定製化的庫。
6. BonsaiJS
BonsaiJS 是個輕量級的 JavaScript圖形庫,提供直觀的圖形 API 和 SVG 渲染器。主要特性包括:架構分離的運行器和渲染器;iFrame,Worker 和 Node 運行上下文;形狀,路徑,Assets(音頻,圖像,字體,subMovies),Keyframe 和常規動畫,等等。支持現代化瀏覽器: Safari, Chrome 和 Firefox。
7. Sigma.js
Sigma.js 是個免費開源的 JavaScript圖形庫,使用 HTML5 canvas 元素。它的設計是特別為了在 web 界面分享互動式網路 Map 和動態展示網路資料庫。
8. Morris.js
Morris.js 是個輕量級的 JavaScript庫,使用 jQuery 和 Rapha&enuml 來繪制時序圖。 Morris.js 生命周期是從代碼驅動 howmanyleft.co.uk 圖表開始的。它支持的瀏覽器有: IE6+, Safari/Chrome/Firefox, iOS 3+ 和 Android 3+。它的公共 API 非常的小,只有一個函數: Morris.Line(選項),包括了許多配置選項。
9. Paper.js
Paper.js 是一個開源的向量圖形腳本框架,基於 HTML5Canvas 開發。提供清晰的場景圖、DOM和大量強大的功能用來創建各種向量圖和貝塞爾曲線。
10. AmCharts
AmCharts 是個高級圖表庫,適用於所有數據的可視化。AmCharts 包括: Column, Bar, Line, Area, Step, Step without risers, Smoothed line, Candlestick, OHLC, Pie/Donut, Radar/ Polar, XY/Scatter/Bubble, Bullet, Funnel/Pyramid 等等。
11. Smoothie Charts
Smoothie Charts是個極小的圖表庫,專為實時流媒體數據設計的。Joe Walnes 想展示 WebSocket推動的實時的流數據。雖然很多圖表庫允許用戶動態更新數據,但是沒有一個是可以優化源源不斷的流數據。
12. Dygraphs
Dygraphs 是個快速,靈活,開源的 JavaScript 圖表庫。它允許用戶展示和解析密集的數據集。可以高亮需要強調的數據集。可以使用滑鼠點擊或者用滑鼠拖動來縮放圖表;可以修改數值或者點擊條目來調整平均周期。
13. Grafico
Grafico 是 Grafico 是一個基於 Raphaël 和 Prototype.js 構建的 JavaScript 圖表庫,提供了各種圖表類型。這些漂亮的圖表,有利於傳遞他們的信息。
14. Highchart JS
Highcharts JS 是一個製作圖表的純 Javascript類庫,主要特性如下:兼容性:兼容當今所有的瀏覽器,包括 iPhone、IE 和火狐等等;對個人用戶完全免 費;純JS,無BS;支持大部分的圖表類型:直線圖,曲線圖、區域圖、區域曲線圖、柱狀圖、餅裝圖、散布圖;跨語言:不管是 PHP、Asp.net 還是 Java 都可以使用。
15. Flotr
Flotr 是一個基於 Prototype 開發的 JavaScript繪圖工具。支持圖例,滑鼠跟蹤,圖片區域選擇,圖片縮放,添加事件鉤子(event hook),通過CSS設置樣式等。
16. Flot
Flot 是受 Plotr 和 PlotKit 的 啟發,Ole Laursen 基於 jquery 開發了一個圖表繪制(WEB Chart)插件並命名為 flot。 flot 是個純 JavaSript 庫,專注於簡單的使用方式,迷人的外觀和互動式特性。支持的瀏覽器有: Internet Explorer 6+, Chrome, Firefox 2+, Safari 3+ and Opera 9.5+。
17. jFreeChart
JFreeChart 主要用來各種各樣的圖表,這些圖表包括:餅圖、柱狀圖(普通柱狀圖以及堆棧柱狀圖)、線圖、區域圖、分布圖、混合圖、甘特圖以及一些儀表盤等等。JFreeChart 項目歷史悠久,而且有大量的開發者在維護。
18. Plotkit
PlotKit 是一個純 JavaScript 繪圖工具包。它支持 HTML Canvas 和 Adobe SVG。有著很完整的文檔,方便用戶使用。
19. Planetary.js
Planetary.js 是個令人稱奇的創建互動式 web 地球儀的 JavaScript庫。它使用 D3 和 TopoJSON 來解析和渲染地理信息。Planetary.js 使用基於插件的架構,甚至默認自身就是個插件!這使得 Planetary.js 非常靈活,而且它是允許用戶完全自定義,包括顏色,大小,rotation 等等。更重要的是,用戶可以在任意位置使用自定義的顏色和大小來顯示動畫「pings」;它還支持滑鼠拖動和縮放,100% 免費和開源。
20. Ember Charts
Ember Charts 是個圖表庫,使用 Ember.js 和 d3.js 框架構建的。它包括時間線,條形圖,餅圖和散點圖,非常容易擴展和修改。這些圖表組件都是開箱即用的,在圖表交互和演示方面應用的很好。
21. Sparky
Sparky 是個免費的 JavaScript 波形圖庫,依賴於 Raphaël ,非常容易使用。支持多個圖表類型(折線,條形,area),折線和區域圖可以有多個顏色選擇。
22. Envision.js
Envision.js 是個 JavaScript 庫,用來簡化,快速創建互動式的 HTML5 可視化圖表。它包括兩個圖表類型:時序圖和 Finance ,提供 API 給開發者,用戶可以直接自定義創建圖表。這個庫氏基於 Flotr2 和 HTML5 Canvas 的。它與框架無關,依賴於幾個小的 JavaScript 庫。
23. Dc.js
dc.js 是個 JavaScript 圖表庫,有著原生的 crossfilter, 支持和允許高效展示大型多維數據集(基於 crossfilter 的示例);圖表使用 dc.js 渲染,是使用原生數據驅動,所以能得到用戶的實時反饋;dc.js 最大的亮點在於能提供一個簡單而強大的 JavaScript 庫,能進行數據可視化和分析;不僅支持桌面瀏覽器還支持移動端。
24. ElyCharts
Elycharts 是一個易於使用的,可定製的 JavaScript圖表繪制組件。這個組件可用於繪制大部分常用的圖表類型包括:line, column, are, bar, pie, sparklines and combinations。它支持多種互動式功能包括:滑鼠跟蹤、事件處理、利用各種動畫高亮顯示選擇中的區域,Tooltip,HTML錨點等。可以動 態修改數據,並以漂亮的動畫效果展示圖表中的變化。圖表利用SVG/VML技術生成,基於jQuery + Raphaël開發。
25. AwesomeChartJS
AwesomeChartJS Awesome Chart JS 是一個 JavaScript生成圖表的類庫,它利用了 HTML5 的 canvas 標簽來創建統計圖表。此類庫就是為了減輕開發者的工作量,使用它只需書寫幾行代碼便能生成漂亮的圖表。
26. Arbor.js
Arbor.js 是一個利用 Web Works 和 jQuery創建的可視化圖形庫,它為圖形組織和屏幕刷新處理提供了一個高效的、力導向的布局演算法。
27. CanvasXpress
canvasXpress 是一個基於HTML5 canvas標簽實現的 JavaScript圖表類庫,它能夠支持線性圖、柱形圖、餅圖和熱點圖等多種常見的圖表類型。它所生成的圖表交互性很強,滑鼠放 上去時會動態顯示值。除此之外,它也具有相當高的可定製性,可設置圖表的文字、顏色和要顯示/隱藏的元素等。當然更重要的一點是,雖然它使用了 HTML5,但是依然支持IE6瀏覽器。
28. JSXGraph
JSXGraph 是一個支持各種瀏覽器的互動式幾何圖庫繪制。JSXGraph 使用 SVG 和 VML。
29. Rickshaw
Rickshaw 是一個用於繪制時序圖的簡單 jS 庫,基於 Mike Bostock』s delightful D3 庫構建。
30. rGraph
RGraph 是基於HTML5 canvas標簽的HTML5 canvas圖形庫,支持 20 種不同的可視化類型。使用 canvas 標簽,RGraph 創建「HTML5 圖表」,意味著更快的 web 頁面載入和更少的 web 伺服器載入。這能幫助減小 web 頁面的大小,低能耗和更快的瀏覽速度。
31. Fusion Chart
FusionCharts Suite XT 是個專業的 JavaScript圖表庫,能創建任何類型的圖表。它創建的圖表都是可以進行完全自定義的,標簽,字體,邊界等等,都可以進行修改。它有很強的交互功能,有許多信息提示,可 點擊的 legend 關鍵字,還有 dril-down,縮放/滾動 和單擊列印圖表功能。
32. Graph Dracula
Dracula 是用一系列的工具來顯示和布局互動圖表,包括各種相關的演算法。它只是純 JavaScript 和 SVG ,並無 Flash,Java,其他插件。它非常容易使用,用戶可以很簡單的自定義任意的元素。
33. Bluff
Bluff 是個 JavaScript 的 Ruby 的 Gruff graphing library埠。它支持所有 Gruff 的特性,但是有著最小的依賴。用戶只需要運行一個第三方腳本: JS.Class 副本(壓縮後只有 2.6kB ) 和 Google 的 ExCanvas 副本,用來支持 IE 中的 canvas。這兩個腳本在 Bluff 中都有下載。Bluff 自身壓縮後大小大概有 11KB 。
34. Pizza Pie Chart
Pizza Pie Charts 是個響應式餅圖圖表,基於 Adobe Snap SVG 框架,通過 HTML 標記和 CSS 來替代 JavaScript 對象,更容易集成各種先進的技術。
35. jGraph
HTML5 圖表組件,完全支持l IE 6-8 和觸屏設備。 JGraph 自2001年來就一直提供最先進的圖表軟體組件,是第一個流行的 JGraph Swing 庫。然後在 2005 年走在時代的前沿開發 mxGraph。
❸ JavaScript如何調試有哪些建議和技巧附五款有用的調試工具
瀏覽器開發者工具
我個人最喜歡Chrome開發者工具。雖然Safari和Firefox無法達到Chrome那麼高的標准,但它們也在逐漸改善。在Firefox中,可以將Firebug和Firefox開發者工具組合使用。如果Firefox小組在改進內置開發者工具方面繼續表現優異的話,Firebug有一天可能會被淘汰。
先把個人偏好放在一邊,你應該能夠在目標瀏覽器中對任意代碼進行試驗和調試。你的目標瀏覽器可能包括著名的IE8,也可能不包括。
要熟悉你自己選擇的開發者工具。你還可以從IDE(集成開發環境)或者第三方軟體獲得額外的調試支持。
在各種調試工具中,調試的基礎知識是相通的。事實上,我是在90年代從Borland的C開發者環境中學習的調試基礎。斷點、條件斷點、監視與最新版Chrome開發者工具是完全相同的。2000年左右,我在Java中捕獲到第一例異常。堆棧跟蹤(Stack traces)的概念依然適用,即使JavaScript術語將其稱作錯誤(Error),檢查堆棧跟蹤仍然和以前一樣有用。
有些知識點是前端開發特有的。例如:
DOM檢查
DOM斷點
調試事件
內存泄露分析
斷點
使用debugger語句可以在源代碼中增加斷點。一旦到達debugger語句,執行中斷。當前作用域的上下文出現在控制台中,還有所有的局部變數和全局變數。將滑鼠游標移到變數上可以查看變數的值。
在代碼中還可以創建條件斷點:
JavaScript
if (condition) { debugger;}
還可以根據自己需要在開發者工具中插入斷點和條件斷點。在Chrome開發者工具中,在Sources視圖中點擊行號即可增加斷點。如果在斷點上點擊右鍵並選擇「編輯斷點(Edit Breakpoint)」,你還可以增加斷點條件。
節點變化的斷點
如果你的任務是調試垃圾代碼,你可能會有這樣的問題:為什麼DOM節點在執行過程中發生了改變。Chrome開發者工具提供了一種方便的斷點,可用來檢測元素樹中的節點變化。
在Elements視圖中,右鍵點擊一個元素,從右鍵菜單中選擇「Break on…」。
節點變化的斷點
DOM斷點的類型可能包括:
選定節點樹狀子目錄(sub-tree)中的節點變化,
選定節點的屬性發生變化,
節點被刪除。
避免記錄引用類型
當記錄對象或數組時,原始類型的值在引用對象記錄中可能會發生變化。當查看引用類型時一定要記住,在記錄和查看期間,代碼執行可能會影響觀測到的結果。
例如,在Chrome開發者工具中執行以下代碼:
JavaScript
var wallets = [{ amount: 0 }];setInterval( function() { console.log( wallets, wallets[0], wallets[0].amount ); wallets[0].amount += 100;}, 1000 );
記錄的第二個和第三個屬性的值是正確的,第一個屬性中對象引用的值是不可靠的。當你第一次在開發者工具中顯示這個屬性時,amount域的值就已經確定了。無論你對同一個引用關閉並重新打開多少次,這個值都不會變化。
記錄參考類型
永遠記得你在記錄什麼。記錄原始類型時,使用帶斷點的watch表達式。如果是非同步代碼,避免記錄引用類型。
表格記錄
在一些開發者工具中,你可以用console.table在控制台中記錄對象數組。
嘗試在你的Chrome開發者工具中執行下列代碼:
JavaScript
console.table( [ { id: 1, name: 'John', address: 'Bay street 1' }, { id: 2, name: 'Jack', address: 'Valley road 2.' }, { id: 3, name: 'Jim', address: 'Hill street 3.' } ] );
輸出是非常好看的表格。所有原始類型都立刻顯示出來,它們的值反應記錄時的狀態。也可以記錄復雜類型,顯示內容為其類型,內容無法顯示。因此,console.table只能用來顯示具有原始類型值的對象構成的二維數據結構。
XHR斷點
有時你可能會遇到錯誤的AJAX請求。如果你無法立刻確認提交請求的代碼,XHR斷點可以幫你節省時間。當提交某一特殊類型的AJAX時,XHR斷點將會終止代碼的執行,並將提交請求的代碼段呈現給用戶。
在Chrome開發者工具的Sources標簽頁中,其中一個斷點類型就是XHR斷點。點擊+圖標,你可以輸入URL片段,當AJAX請求的URL中出現這個URL片段時,JavaScript代碼將會中斷。
事件監聽器斷點
Chrome開發者工具可以捕獲所有類型的事件,當用戶按下一個鍵、點擊一下滑鼠時,可以對觸發的事件進行調試。
異常時暫停
Chrome開發者工具可以在拋出異常時暫停執行JavaScript代碼。這可以讓你在Error對象被創建時觀察應用的狀態。
異常時暫停
代碼片段
Sources標簽頁左側面板上有一個代碼片段(Snippet)子標簽頁,可用於保存代碼片段,幫你調試代碼。
如果你堅持使用控制台調試,反復寫相同的代碼,你應該將你的代碼抽象成調試片段。這樣的話,甚至還可以把你的調試技巧教給你的同事。
Paul Irish發布過一些基本的調試代碼片段,例如在函數執行前插入斷點。審查這些代碼片段,並在網上搜索其他代碼片段,這是很有價值的。
在函數執行前插入斷點
如果你可以得到函數調用的源代碼,你還可以在函數調用前插入斷點來終止函數的執行。如果你想調試f函數,用debug(f)語句可以增加這種斷點。
Unminify最小化代碼
(譯者註:unminify 解壓縮並進行反混淆)
盡可能使用 source map。有時生產代碼不能使用source map,但不管怎樣,你都 不應該直接對生產代碼進行調試。
(譯者註:sourcemap 是針對壓縮合並後的web代碼進行調試的工具)
如果沒有source map的話,你最後還可以求助於Chrome開發者工具Sources標簽頁中的格式化按鈕(Pretty Print Button)。格式化按鈕{}位於源代碼文本區域的下方。格式化按鈕對源代碼進行美化,並改變行號,這使得調試代碼更加方便,堆棧跟蹤更加有效。
格式化按鈕只有在不得已時才會使用。從某種意義上來說,丑代碼就是難看,因為代碼中的命名沒有明確的語義。
DOM元素的控制台書簽
Chrome開發者工具和Firebug都提供了書簽功能,用於顯示你在元素標簽頁(Chrome)或HTML標簽頁(Firebug)中最後點擊的DOM元素。如果你依次選擇了A元素、B元素和C元素,
$0 表示C元素
$1 表示B元素
$2 表示A元素
如果你又選擇了元素D,那麼$0、$1、$2和$3分別代表D、C、B和A。
訪問調用棧
JavaScript
var f = function() { g(); } var g = function() { h(); }var h = function() { console.trace('trace in h'); }f();
Chrome開發者工具中的Sources標簽頁也在Watch表達式下面顯示調用棧。
性能審查
性能審查工具通常是很有用的。這些工具可以用於防止內存泄露,還可以檢測到你的網站哪裡需要優化。由於這些工具並不了解你的產品,你可以忽略其某些建議。通常來說,性能分析工具能夠有效范圍,可以使你的網站顯著優化。
審查工具舉例:
Chrome開發者工具的Audit標簽頁
YSlow
熟能生巧
你可能熟悉某些調試技巧,其他技巧也會幫你節省不少時間。如果你開始在實踐中使用這些技巧,我建議你幾周之後重新閱讀本文。你將會驚奇地發現,你的關注點在幾周內就發生了變化。
五個常用的js調試工具
JavaScript被稱作以原型(prototype)為基礎的語言。這種語言有很多特色,比如動態和弱類型,它還有一等函數(first class function)。另一個特點是它是一個多范型(multi-paradigm)語言,支持面向對象、聲明式、函數式的編程風格。
JavaScript最初被用作客戶端語言,瀏覽器實現它用來提供增強的用戶介面。JavaScript在很多現代的網站和Web應用程序中都有應用。JavaScript的一個很棒的功能也很重要,就是我確實可以用它來提高或改善網站的用戶體驗。JavaScript也可以提供豐富的功能和交互的組件。
JavaScript在這技術高速發展的同時變得非常受歡迎。因為受歡迎JavaScript也改進了許多,修改JavaScript腳本有很多事要做。這次我們為開發者帶來了幾個非常有用的JavaScript調試工具。
1)Drosera
可以調試任何WebKit程序,不僅僅是Safari瀏覽器。
5)Venkman
Venkman是Mozilla的JavaScript調試器名稱。它旨在為以Mozilla為基礎的瀏覽器(Firefox, Netscape 7.x/9.x and SeaMonkey)提供一個強大的JavaScript調試環境。