console.log總是出現undefined——麻煩的console
//本文為作者自己思考后總結出的一些理論知識,若有錯誤,歡迎指出
bug出現
需求如下:新建一個car對象,調用其中的decoration功能,識別出該類是那一輛車,車的款式要求從"勞斯萊斯", "蘭博基尼", "別克君威", "北京現代"中隨機出現
//定義一個car類
function Car() {
this.decoration = function () {
var carlist = ["勞斯萊斯", "蘭博基尼", "別克君威", "北京現代"]
var r = Math.floor(Math.random() * carlist.length);
return console.log(carlist[r]);
}
}
var car = new Car();
// 調用car中的decoration方法
console.log("我是一輛" + car.decoration());
但是與預期不同,控制台中輸出的結果為,
即car.decoration的值為undefined:
解決方案:
直接將this.decoration 的返回值設置為carlist[r]即可,代碼如下
//定義一個car類
function Car() {
this.decoration = function () {
var carlist = ["勞斯萊斯", "蘭博基尼", "別克君威", "北京現代"]
var r = Math.floor(Math.random() * carlist.length);
return carlist[r];
}
}
var car = new Car();
// 調用car中的decoration方法
console.log("我是一輛" + car.decoration());
這時候問題解決了,但是依舊需要知道問題出現的原因
原因分析
例一:
如下,但return一個1+1時返回結果不會是一個 1+1 而是返回一個2
function plus(){
return 1+1;
}
console.log(plus());
也容易看出,函數的返回值是一個運行結果
再來看一個例子
例二:
代碼如下所示,此時控制台打印的結果為 undefined,也就是說,未指定return值的情況下,函數的執行結果為返回值為undefined
function plus(){
1+1;
}
console.log(plus());
例三
再看看下面代碼的輸出結果:
console.log(typeof(console.log ));
其結果為function
結論
則當我們return 一個console.log()時,return的是一個方法的放回結果,且該方法沒有指定返回值,就像例二一樣
所以在我們return 一個console.log()函數的時候得到則會是一個undefined。