return console.log()结果为undefined现象的解答 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());

但是与预期不同,控制台中输出的结果为,
return console.log()结果为undefined现象的解答
console.log总是出现undefined——麻烦的console

即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。