一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

console對(duì)象

 飛羽寒 2014-09-17

 console對(duì)象

目錄

開發(fā)者工具

目前,各大瀏覽器都自帶開發(fā)工具。以Chrome瀏覽器為例,它有一個(gè)“開發(fā)者工具”(Developer Tools)用來(lái)調(diào)試網(wǎng)頁(yè)。

打開“開發(fā)者工具”的方法有三種。

  1. 按F12或者Control+Shift+i。

  2. 在菜單中選擇“工具”/“開發(fā)者工具”。

  3. 在一個(gè)頁(yè)面元素上,打開右鍵菜單,選擇其中的“Inspect Element”。

開發(fā)者工具

打開以后,可以看到在頂端有八個(gè)面板卡可供選擇,分別是:

  • Elements:用來(lái)調(diào)試網(wǎng)頁(yè)的HTML源碼和CSS代碼。

  • Resources:查看網(wǎng)頁(yè)加載的各種資源文件(比如代碼文件、字體文件、css文件等),以及在硬盤上創(chuàng)建的各種內(nèi)容(比如本地緩存、Cookie、Local Storage等)。

  • Network:查看網(wǎng)頁(yè)的HTTP通信情況。

  • Sources:調(diào)試JavaScript代碼。

  • Timeline:查看各種網(wǎng)頁(yè)行為隨時(shí)間變化的情況。

  • Profiles:查看網(wǎng)頁(yè)的性能情況,比如CPU和內(nèi)存消耗。

  • Audits:提供網(wǎng)頁(yè)優(yōu)化的建議。

  • Console:用來(lái)運(yùn)行JavaScript命令。

這八個(gè)面板都有各自的用途,以下詳細(xì)介紹Console面板,也就是控制臺(tái)。

console對(duì)象

console對(duì)象代表瀏覽器的JavaScript控制臺(tái)。雖然它還不是標(biāo)準(zhǔn),但是各大瀏覽器都原生支持,已經(jīng)成為事實(shí)上的標(biāo)準(zhǔn)。

console對(duì)象主要有兩個(gè)作用:

  • 顯示網(wǎng)頁(yè)代碼運(yùn)行時(shí)的錯(cuò)誤信息。

  • 提供了一個(gè)命令行接口,用來(lái)與網(wǎng)頁(yè)代碼互動(dòng)。

console對(duì)象的接口有很多方法,可供開發(fā)者調(diào)用。

console.log()

log方法用于在console窗口顯示信息。

如果參數(shù)是普通字符串,log方法將字符串內(nèi)容顯示在console窗口。

console.log("Hello World")
// Hello World

console.log("a","b","c")
// a b c

如果參數(shù)是格式字符串(使用了格式占位符),log方法將占位符替換以后的內(nèi)容,顯示在console窗口。

console.log(" %s + %s = %s", 1, 1, 2)
//  1 + 1 = 2

上面代碼的%s表示字符串的占位符,其他占位符還有

  • %d, %i 整數(shù)
  • %f 浮點(diǎn)數(shù)
  • %o 對(duì)象的鏈接
  • %c CSS格式字符串

log方法的兩種參數(shù)格式,可以結(jié)合在一起使用。

console.log(" %s + %s ", 1, 1, "= 2")
// 1 + 1  = 2

console對(duì)象的所有方法,都可以被覆蓋。因此,可以按照自己的需要,定義console.log方法。

["log", "warn", "error"].forEach(function(method) {
    console[method] = console[method].bind(
        console,
        new Date().toISOString()
    );
});

console.log("出錯(cuò)了!");
// 2014-05-18T09:00.000Z 出錯(cuò)了!

上面代碼表示,使用自定義的console.log方法,可以在顯示結(jié)果添加當(dāng)前時(shí)間。

console.debug(),console.info(),console.warn(),console.error()

除了log,console對(duì)象還有四個(gè)輸出信息的方法:

  • debug:等同于log。

  • info:等同于log。

  • warn:輸出信息時(shí),在最前面加一個(gè)黃色三角,表示警告。

  • error:輸出信息時(shí),在最前面加一個(gè)紅色的叉,表示出錯(cuò)。

這四個(gè)方法的用法與log完全一樣。

console.error("Error: %s (%i)", "Server is not responding",500)
// Error: Server is not responding (500)

console.warn('Warning! Too few nodes (%d)', document.childNodes.length)
// Warning! Too few nodes (1)

console.table()

對(duì)于某些復(fù)合類型的數(shù)據(jù),console.table方法可以將其轉(zhuǎn)為表格顯示。

var languages = [
    { name: "JavaScript", fileExtension: ".js" },
    { name: "TypeScript", fileExtension: ".ts" },
    { name: "CoffeeScript", fileExtension: ".coffee" }
];

console.table(languages);

上面代碼的language,轉(zhuǎn)為表格顯示如下。

(index) name fileExtension
0 "JavaScript" ".js"
1 "TypeScript" ".ts"
2 "CoffeeScript" ".coffee"

復(fù)合型數(shù)據(jù)轉(zhuǎn)為表格顯示的條件是,必須擁有主鍵。對(duì)于上面的數(shù)組來(lái)說(shuō),主鍵就是數(shù)字鍵。對(duì)于對(duì)象來(lái)說(shuō),主鍵就是它的最外層鍵。

var languages = {
    csharp: { name: "C#", paradigm: "object-oriented" },
    fsharp: { name: "F#", paradigm: "functional" }
};

console.table(languages);

上面代碼的language,轉(zhuǎn)為表格顯示如下。

(index) name paradigm
csharp "C#" "object-oriented"
fsharp "F#" "functional"

console.assert()

assert方法用來(lái)驗(yàn)證某個(gè)條件是否為真。如果為假,則顯示一條事先指定的錯(cuò)誤信息。它的格式如下。

console.assert(條件判斷,輸出信息)

使用方法如下。

console.assert(true === false,"判斷條件不成立")
// Assertion failed: 判斷條件不成立

下面是另一個(gè)例子,判斷子節(jié)點(diǎn)的個(gè)數(shù)是否大于等于500。

console.assert(list.childNodes.length < 500, "節(jié)點(diǎn)個(gè)數(shù)大于等于500")

console.time(),console.timeEnd()

這兩個(gè)方法用于計(jì)時(shí),可以算出一個(gè)操作所花費(fèi)的準(zhǔn)確時(shí)間。

console.time("Array initialize");

var array= new Array(1000000);
for (var i = array.length - 1; i >= 0; i--) {
    array[i] = new Object();
};

console.timeEnd("Array initialize");

// Array initialize: 1914.481ms

time方法表示計(jì)時(shí)開始,timeEnd方法表示計(jì)時(shí)結(jié)束。它們的參數(shù)是計(jì)時(shí)器的名稱。調(diào)用timeEnd方法之后,console窗口會(huì)顯示“計(jì)時(shí)器名稱: 所耗費(fèi)的時(shí)間”。

console.group(),console.groupend()

這兩個(gè)方法用于將顯示的信息分組。它只在輸出大量信息時(shí)有用,分在一組的信息,可以用鼠標(biāo)折疊/展開。

其他方法

  • console.dir():輸出對(duì)象的信息,用于顯示一個(gè)對(duì)象的所有屬性。

  • console.clear():對(duì)console窗口進(jìn)行清屏,光標(biāo)回到第一行。

  • console.trace():當(dāng)前執(zhí)行的代碼在堆棧中的調(diào)用路徑。

命令行API

在控制臺(tái)中,除了使用console對(duì)象,還可以使用一些控制臺(tái)自帶的命令行方法。

*(1)$_ *

$_屬性返回上一個(gè)表達(dá)式的值。

2+2
// 4
$_
// 4

*(2)$0 - $4 *

控制臺(tái)保存了最近5個(gè)在Elements面板選中的DOM元素,$0代表倒數(shù)第一個(gè),$1代表倒數(shù)第二個(gè),以此類推直到$4。

*(3)$(selector) *

$(selector)返回一個(gè)數(shù)組,包括特定的CSS選擇器匹配的所有DOM元素。該方法實(shí)際上是document.querySelectorAll方法的別名。

var images = $('img');
for (each in images) {
    console.log(images[each].src);
}

上面代碼打印出網(wǎng)頁(yè)中所有img元素的src屬性。

*(4)$x(path) *

$x(path)方法返回一個(gè)數(shù)組,包含匹配特定XPath表達(dá)式的所有DOM元素。

$x("http://p[a]")

上面代碼返回所有包含a元素的p元素。

*(5)inspect(object) *

inspect(object)方法打開相關(guān)面板,并選中相應(yīng)的元素:DOM元素在Elements面板中顯示,JavaScript對(duì)象在Profiles中顯示。

*(6)getEventListeners(object) *

getEventListeners(object)方法返回一個(gè)對(duì)象,該對(duì)象的成員為登記了回調(diào)函數(shù)的各種事件(比如click或keydown),每個(gè)事件對(duì)應(yīng)一個(gè)數(shù)組,數(shù)組的成員為該事件的回調(diào)函數(shù)。

*(7)keys(object),values(object) *

keys(object)方法返回一個(gè)數(shù)組,包含特定對(duì)象的所有鍵名。

values(object)方法返回一個(gè)數(shù)組,包含特定對(duì)象的所有鍵值。

var o = {'p1':'a', 'p2':'b'};

keys(o)
// ["p1", "p2"]
values(o)
// ["a", "b"]

(8)monitorEvents(object[, events]) ,unmonitorEvents(object[, events])

monitorEvents(object[, events])方法監(jiān)聽特定對(duì)象上發(fā)生的特定事件。當(dāng)這種情況發(fā)生時(shí),會(huì)返回一個(gè)Event對(duì)象,包含該事件的相關(guān)信息。unmonitorEvents方法用于停止監(jiān)聽。

monitorEvents(window, "resize");

monitorEvents(window, ["resize", "scroll"])

上面代碼分別表示單個(gè)事件和多個(gè)事件的監(jiān)聽方法。

monitorEvents($0, "mouse");
unmonitorEvents($0, "mousemove");

上面代碼表示如何停止監(jiān)聽。

monitorEvents允許監(jiān)聽同一大類的事件。所有事件可以分成四個(gè)大類。

  • mouse:"mousedown", "mouseup", "click", "dblclick", "mousemove", "mouseover", "mouseout", "mousewheel"
  • key:"keydown", "keyup", "keypress", "textInput"
  • touch:"touchstart", "touchmove", "touchend", "touchcancel"
  • control:"resize", "scroll", "zoom", "focus", "blur", "select", "change", "submit", "reset"
monitorEvents($("#msg"), "key");

上面代碼表示監(jiān)聽所有key大類的事件。

*(9)profile([name]),profileEnd() *

profile方法用于啟動(dòng)一個(gè)特定名稱的CPU性能測(cè)試,profileEnd方法用于結(jié)束該性能測(cè)試。

profile("My profile")

profileEnd("My profile")

*(10)其他方法 *

命令行API還提供以下方法。

  • clear()方法清除控制臺(tái)的歷史。
  • copy(object)方法復(fù)制特定DOM元素到剪貼板。
  • dir(object)方法顯示特定對(duì)象的所有屬性,是console.dir方法的別名。
  • dirxml(object)方法顯示特定對(duì)象的XML形式,是console.dirxml方法的別名。

debugger語(yǔ)句

debugger語(yǔ)句必須與除錯(cuò)工具配合使用,如果沒(méi)有除錯(cuò)工具,debugger語(yǔ)句不會(huì)產(chǎn)生任何結(jié)果。

在chrome瀏覽器中,當(dāng)代碼運(yùn)行到debugger指定的行時(shí),就會(huì)暫停運(yùn)行,自動(dòng)打開console界面。它的作用類似于設(shè)置斷點(diǎn)。

for(var i = 0;i<5;i++){
    console.log(i);
    if (i===2) debugger;
}

上面代碼打印出0,1,2以后,就會(huì)暫停,自動(dòng)打開console窗口,等待進(jìn)一步處理。

移動(dòng)端開發(fā)

(本節(jié)暫存此處)

模擬手機(jī)視口(viewport)

chrome瀏覽器的開發(fā)者工具,提供一個(gè)選項(xiàng),可以模擬手機(jī)屏幕的顯示效果。

打開“設(shè)置”的Overrides面板,選擇相應(yīng)的User Agent和Device Metrics選項(xiàng)。

選擇User Agent

User Agent可以使得當(dāng)前瀏覽器發(fā)出手機(jī)瀏覽器的Agent字符串,Device Metrics則使得當(dāng)前瀏覽器的視口變?yōu)槭謾C(jī)的視口大小。這兩個(gè)選項(xiàng)可以獨(dú)立選擇,不一定同時(shí)選中。

模擬touch事件

我們可以在PC端模擬JavaScript的touch事件。

首先,打開chrome瀏覽器的開發(fā)者工具,選擇“設(shè)置”中的Overrides面板,勾選“Enable touch events”選項(xiàng)。

Enable touch events的圖片

然后,鼠標(biāo)就會(huì)觸發(fā)touchstart、touchmove和touchend事件。(此時(shí),鼠標(biāo)本身的事件依然有效。)

至于多點(diǎn)觸摸,必須要有支持這個(gè)功能的設(shè)備才能模擬,具體可以參考Multi-touch web development

模擬經(jīng)緯度

chrome瀏覽器的開發(fā)者工具,還可以模擬當(dāng)前的經(jīng)緯度數(shù)據(jù)。打開“設(shè)置”的Overrides面板,選中Override Geolocation選項(xiàng),并填入相應(yīng)經(jīng)度和緯度數(shù)據(jù)。

模擬經(jīng)緯度

遠(yuǎn)程除錯(cuò)

(1) Chrome for Android

Android設(shè)備上的Chrome瀏覽器支持USB除錯(cuò)。PC端需要安裝Android SDK和Chrome瀏覽器,然后用usb線將手機(jī)和PC連起來(lái),可參考官方文檔

(2) Opera

Opera瀏覽器的除錯(cuò)環(huán)境Dragonfly支持遠(yuǎn)程除錯(cuò)(教程)。

(3) Firefox for Android

參考官方文檔。

(4) Safari on iOS6

你可以使用Mac桌面電腦的Safari 6瀏覽器,進(jìn)行遠(yuǎn)程除錯(cuò)(教程)。

Google Closure

(本節(jié)暫存此處)

Google Closure是Google提供的一個(gè)JavaScript源碼處理工具,主要用于壓縮和合并多個(gè)JavaScript腳本文件。

Google Closure使用Java語(yǔ)言開發(fā),使用之前必須先安裝Java。然后,前往官方網(wǎng)站進(jìn)行下載,這里我們主要使用其中的編譯器(compiler)。

首先,查看使用幫助。

java -jar /path/to/closure/compiler.jar --help

直接在腳本命令后面跟上要合并的腳本,就能完成合并。

java -jar /path/to/closure/compiler.jar *.js

使用--js參數(shù),可以確保按照參數(shù)的先后次序合并文件。

java -jar /path/to/closure/compiler.jar --js script1.js --js script2.js --js script3.js

但是,這樣的運(yùn)行結(jié)果是將合并后的文件全部輸出到屏幕(標(biāo)準(zhǔn)輸出),因此需要使用--js_output_file參數(shù),指定合并后的文件名。

java -jar /path/to/closure/compiler.jar --js script1.js --js script2.js --js script3.js --js_output_file scripts-compiled.js

Javascript 性能測(cè)試

(本節(jié)暫存此處)

第一種做法

最常見的測(cè)試性能的做法,就是同一操作重復(fù)n次,然后計(jì)算每次操作的平均時(shí)間。

var totalTime,
    start = new Date,
    iterations = 6;

while (iterations--) {
  // Code snippet goes here
}

// totalTime → the number of milliseconds it took to execute
// the code snippet 6 times
totalTime = new Date - start;

上面代碼的問(wèn)題在于,由于計(jì)算機(jī)的性能不斷提高,如果只重復(fù)6次,很可能得到0毫秒的結(jié)果,即不到1毫秒,Javascript引擎無(wú)法測(cè)量。

第二種做法

另一種思路是,測(cè)試單位時(shí)間內(nèi)完成了多少次操作。

var hz,
    period,
    startTime = new Date,
    runs = 0;

do {
  // Code snippet goes here
  runs++;
  totalTime = new Date - startTime;
} while (totalTime < 1000);

// convert ms to seconds
totalTime /= 1000;

// period → how long per operation
period = totalTime / runs;

// hz → the number of operations per second
hz = 1 / period;

// can be shortened to
// hz = (runs * 1000) / totalTime;

這種做法的注意之處在于,測(cè)試結(jié)構(gòu)受外界環(huán)境影響很大,為了得到正確結(jié)構(gòu),必須重復(fù)多次。

參考鏈接

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    欧美日韩中黄片免费看| 日本人妻熟女一区二区三区| 沐浴偷拍一区二区视频| 久久精品国产99精品最新| 亚洲一区二区三区四区性色av| 国内自拍偷拍福利视频| 亚洲精品高清国产一线久久| 亚洲欧美国产精品一区二区| 国产日韩欧美综合视频| 日韩人妻一区中文字幕| 成人精品网一区二区三区| 大伊香蕉一区二区三区| 五月婷婷亚洲综合一区| 日本加勒比在线观看一区| 国产成人精品资源在线观看| 国产精品熟女乱色一区二区| 亚洲精品中文字幕欧美| 日韩黄色大片免费在线| 午夜精品黄片在线播放| 99香蕉精品视频国产版| 99少妇偷拍视频在线| 日本不卡在线视频你懂的| 开心久久综合激情五月天| 又大又长又粗又黄国产| 又大又紧又硬又湿又爽又猛| 色一情一伦一区二区三| 男人大臿蕉香蕉大视频 | 东京热一二三区在线免| 欧美亚洲国产日韩一区二区| 国产精品亚洲一级av第二区| 亚洲中文字幕在线综合视频| 久久福利视频在线观看| 韩国日本欧美国产三级| 日韩1区二区三区麻豆| 不卡视频在线一区二区三区| 久久精品久久精品中文字幕| 五月婷婷六月丁香在线观看| 亚洲香艳网久久五月婷婷| 欧美有码黄片免费在线视频| 日韩人妻精品免费一区二区三区| 激情三级在线观看视频|