轉自阮一峰http://www.ruanyifeng.com/home.html console.log(),console.info(),console.debug() console.log方法用於在控制台輸出信息。它可以接受一個或多個參數,將它們連接起來輸出。 console.log方法會自動 ...
轉自阮一峰http://www.ruanyifeng.com/home.html
console.log(),console.info(),console.debug()
console.log
方法用於在控制台輸出信息。它可以接受一個或多個參數,將它們連接起來輸出。
console.log('Hello World')
// Hello World
console.log('a', 'b', 'c')
// a b c
console.log
方法會自動在每次輸出的結尾,添加換行符。
console.log(1);
console.log(2);
console.log(3);
// 1
// 2
// 3
如果第一個參數是格式字元串(使用了格式占位符),console.log
方法將依次用後面的參數替換占位符,然後再進行輸出。
console.log(' %s + %s = %s', 1, 1, 2)
// 1 + 1 = 2
上面代碼中,console.log
方法的第一個參數有三個占位符(%s
),第二、三、四個參數會在顯示時,依次替換掉這個三個占位符。
console.log
方法支持以下占位符,不同類型的數據必須使用對應的占位符。
%s
字元串%d
整數%i
整數%f
浮點數%o
對象的鏈接%c
CSS 格式字元串
var number = 11 * 9;
var color = 'red';
console.log('%d %s balloons', number, color);
// 99 red balloons
上面代碼中,第二個參數是數值,對應的占位符是%d
,第三個參數是字元串,對應的占位符是%s
。
使用%c
占位符時,對應的參數必須是 CSS 代碼,用來對輸出內容進行 CSS 渲染。
console.log(
'%cThis text is styled!',
'color: red; background: yellow; font-size: 24px;'
)
上面代碼運行後,輸出的內容將顯示為黃底紅字。
console.log
方法的兩種參數格式,可以結合在一起使用。
console.log(' %s + %s ', 1, 1, '= 2')
// 1 + 1 = 2
如果參數是一個對象,console.log
會顯示該對象的值。
console.log({foo: 'bar'})
// Object {foo: "bar"}
console.log(Date)
// function Date() { [native code] }
上面代碼輸出Date
對象的值,結果為一個構造函數。
console.info
是console.log
方法的別名,用法完全一樣。只不過console.info
方法會在輸出信息的前面,加上一個藍色圖標。
console.debug
方法與console.log
方法類似,會在控制台輸出調試信息。但是,預設情況下,console.debug
輸出的信息不會顯示,只有在打開顯示級別在verbose
的情況下,才會顯示。
console
對象的所有方法,都可以被覆蓋。因此,可以按照自己的需要,定義console.log
方法。
['log', 'info', 'warn', 'error'].forEach(function(method) {
console[method] = console[method].bind(
console,
new Date().toISOString()
);
});
console.log("出錯了!");
// 2014-05-18T09:00.000Z 出錯了!
上面代碼表示,使用自定義的console.log
方法,可以在顯示結果添加當前時間。
console.warn(),console.error()
warn
方法和error
方法也是在控制台輸出信息,它們與log
方法的不同之處在於,warn
方法輸出信息時,在最前面加一個黃色三角,表示警告;error
方法輸出信息時,在最前面加一個紅色的叉,表示出錯。同時,還會高亮顯示輸出文字和錯誤發生的堆棧。其他方面都一樣。
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)
可以這樣理解,log
方法是寫入標準輸出(stdout
),warn
方法和error
方法是寫入標準錯誤(stderr
)。
console.table()
對於某些複合類型的數據,console.table
方法可以將其轉為表格顯示。
var languages = [
{ name: "JavaScript", fileExtension: ".js" },
{ name: "TypeScript", fileExtension: ".ts" },
{ name: "CoffeeScript", fileExtension: ".coffee" }
];
console.table(languages);
上面代碼的language
變數,轉為表格顯示如下。
(index) | name | fileExtension |
---|---|---|
0 | "JavaScript" | ".js" |
1 | "TypeScript" | ".ts" |
2 | "CoffeeScript" | ".coffee" |
下麵是顯示表格內容的例子。
var languages = {
csharp: { name: "C#", paradigm: "object-oriented" },
fsharp: { name: "F#", paradigm: "functional" }
};
console.table(languages);
上面代碼的language
,轉為表格顯示如下。
(index) | name | paradigm |
---|---|---|
csharp | "C#" | "object-oriented" |
fsharp | "F#" | "functional" |
console.count()
count
方法用於計數,輸出它被調用了多少次。
function greet(user) {
console.count();
return 'hi ' + user;
}
greet('bob')
// : 1
// "hi bob"
greet('alice')
// : 2
// "hi alice"
greet('bob')
// : 3
// "hi bob"
上面代碼每次調用greet
函數,內部的console.count
方法就輸出執行次數。
該方法可以接受一個字元串作為參數,作為標簽,對執行次數進行分類。
function greet(user) {
console.count(user);
return "hi " + user;
}
greet('bob')
// bob: 1
// "hi bob"
greet('alice')
// alice: 1
// "hi alice"
greet('bob')
// bob: 2
// "hi bob"
上面代碼根據參數的不同,顯示bob
執行了兩次,alice
執行了一次。
console.dir(),console.dirxml()
dir
方法用來對一個對象進行檢查(inspect),並以易於閱讀和列印的格式顯示。
console.log({f1: 'foo', f2: 'bar'})
// Object {f1: "foo", f2: "bar"}
console.dir({f1: 'foo', f2: 'bar'})
// Object
// f1: "foo"
// f2: "bar"
// __proto__: Object
上面代碼顯示dir
方法的輸出結果,比log
方法更易讀,信息也更豐富。
該方法對於輸出 DOM 對象非常有用,因為會顯示 DOM 對象的所有屬性。
console.dir(document.body)
Node 環境之中,還可以指定以代碼高亮的形式輸出。
console.dir(obj, {colors: true})
dirxml
方法主要用於以目錄樹的形式,顯示 DOM 節點。
console.dirxml(document.body)
如果參數不是 DOM 節點,而是普通的 JavaScript 對象,console.dirxml
等同於console.dir
。
console.dirxml([1, 2, 3])
// 等同於
console.dir([1, 2, 3])
console.assert()
console.assert
方法主要用於程式運行過程中,進行條件判斷,如果不滿足條件,就顯示一個錯誤,但不會中斷程式執行。這樣就相當於提示用戶,內部狀態不正確。
它接受兩個參數,第一個參數是表達式,第二個參數是字元串。只有當第一個參數為false
,才會提示有錯誤,在控制台輸出第二個參數,否則不會有任何結果。
console.assert(false, '判斷條件不成立')
// Assertion failed: 判斷條件不成立
// 相當於
try {
if (!false) {
throw new Error('判斷條件不成立');
}
} catch(e) {
console.error(e);
}
下麵是一個例子,判斷子節點的個數是否大於等於500。
console.assert(list.childNodes.length < 500, '節點個數大於等於500')
上面代碼中,如果符合條件的節點小於500個,不會有任何輸出;只有大於等於500時,才會在控制台提示錯誤,並且顯示指定文本。
console.time(),console.timeEnd()
這兩個方法用於計時,可以算出一個操作所花費的準確時間。
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
方法表示計時開始,timeEnd
方法表示計時結束。它們的參數是計時器的名稱。調用timeEnd
方法之後,控制台會顯示“計時器名稱: 所耗費的時間”。
console.group(),console.groupEnd(),console.groupCollapsed()
console.group
和console.groupEnd
這兩個方法用於將顯示的信息分組。它只在輸出大量信息時有用,分在一組的信息,可以用滑鼠摺疊/展開。
console.group('一級分組');
console.log('一級分組的內容');
console.group('二級分組');
console.log('二級分組的內容');
console.groupEnd(); // 二級分組結束
console.groupEnd(); // 一級分組結束
上面代碼會將“二級分組”顯示在“一級分組”內部,並且“一級分組”和“二級分組”前面都有一個摺疊符號,可以用來摺疊本級的內容。
console.groupCollapsed
方法與console.group
方法很類似,唯一的區別是該組的內容,在第一次顯示時是收起的(collapsed),而不是展開的。
console.groupCollapsed('Fetching Data');
console.log('Request Sent');
console.error('Error: Server not responding (500)');
console.groupEnd();
上面代碼只顯示一行”Fetching Data“,點擊後才會展開,顯示其中包含的兩行。
console.trace(),console.clear()
console.trace
方法顯示當前執行的代碼在堆棧中的調用路徑。
console.trace()
// console.trace()
// (anonymous function)
// InjectedScript._evaluateOn
// InjectedScript._evaluateAndWrap
// InjectedScript.evaluate
console.clear
方法用於清除當前控制台的所有輸出,將游標回置到第一行。如果用戶選中了控制台的“Preserve log”選項,console.clear
方法將不起作用。