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。

return console.log()结果为undefined现象的解答的更多相关文章

  1. JS里try...catch...finally详解,以及console日志调试(console.log、console.info等)

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  2. [AST Babel Plugin] Transform code, add line:column number for console log

    For example we have current code: function add(a, b) { console.log(a, b) return a + b } function sub ...

  3. console.log(a)和console.log(window.a)的区别?

    console.log(window.l); //undefined console.log(l); //Uncaught ReferenceError: l is not defined js对于未 ...

  4. console.log的返回值undefined

    console.log(fun());  function fun(){ console.log(1); } //////输出结果为: 1 undefined console.log(fun());  ...

  5. console.log((function f(n){return ((n > 1) ? n * f(n-1) : n)})(5))调用解析

    console.log((function f(n){) ? n * f(n-) : n)})()); 5被传入到函数,函数内部三元计算,5 > 1成立,运算结果是5*f(4),二次运算,5*4 ...

  6. 从window.console&&console.log(123)浅谈JS的且运算逻辑(&&)

    一.JS的且运算记得最开始看到window.console&&console.log(123),当时知道能起什么作用但是没有深入研究,最近在研究后总算弄明白了.要理解这个,首先得明白三 ...

  7. 前端不为人知的一面--前端冷知识集锦 前端已经被玩儿坏了!像console.log()可以向控制台输出图片

    前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前 ...

  8. JS之console.log详解以及兄弟姐们邻居方法扩展

    console.log() 基本用法 console.log,前端常用它来调试分析代码,你可以在任何的js代码中调用console.log(),然后你就可以在浏览器控制台看到你刚才打印的常量,变量,数 ...

  9. {}+[]与console.log({}+[])结果不同?从JavaScript的大括号谈起

    看到这样一个问题:为什么直接在控制台运行{} + []和用console.log({} + [])输出,两者结果不一样? 于是乎打开chrome的控制台运行了一下: 为什么结果会这样呢?不得已学习一下 ...

随机推荐

  1. [Abp vNext 源码分析] - 19. 多租户

    一.简介 ABP vNext 原生支持多租户体系,可以让开发人员快速地基于框架开发 SaaS 系统.ABP vNext 实现多租户的思路也非常简单,通过一个 TenantId 来分割各个租户的数据,并 ...

  2. 《第31天:JQuery - 轮播图》

    源码下载地址:链接:https://pan.baidu.com/s/16K9I... 提取码:0ua2 写这篇文章,当做是对自已这一天的一个总结.写轮播图要准备的东西:三张尺寸大小一样的图片.分为三个 ...

  3. moment太重? 那就试试miment--一个超轻量级的js时间库

    介绍 Miment 是一个轻量级的时间库(打包压缩后只有1K),没有太多的方法,Miment的设计理念就是让你以几乎为零的成本快速上手,无需一遍一遍的撸文档 由来 首先 致敬一下Moment,非常好用 ...

  4. [CSS]CSS Position 详解

    一. CSS position 属性介绍 CSS中position属性指定一个元素(静态的,相对的,绝对或固定)的定位方法的类型.有static,relative,absolute和fixed四种取值 ...

  5. Linux学习5-安装mysql

    前言 今天我们来学习一下如何在Linux下安装mysql 一:准备安装包 可以从http://www.mysql.com/downloads/官方网站下载到最新版本,本次安装的版本是mysql-5.7 ...

  6. 前端开发--nginx番外篇

    Centos7下Nginx开发使用(背景: 阿里云ECS Centos7) 安装和启动 安装教程 Centos7安装Nginx实战 需要主意的如下: 文中第四步 4.配置编译参数命令:(可以使用./c ...

  7. Redis(6)——GeoHash查找附近的人

    像微信 "附近的人",美团 "附近的餐厅",支付宝共享单车 "附近的车" 是怎么设计实现的呢? 一.使用数据库实现查找附近的人 我们都知道, ...

  8. iOS围绕某点缩放或旋转的AnchorPoint的设定

    经常会遇到需求,要求手势的缩放或者旋转操作,要求动作变化围绕某一个特定点,或者是两指的中心点,或者是某一个点. 这个问题首先要清晰的知道,iOS各个view的层次关系.特别是,要清除的知道,当前vie ...

  9. LinkedHashMap源码解读

    1. 前言 还是从面试中来,到面试中去.面试官在面试 Redis 的时候经常会问到,Redis 的 LRU 是如何实现的?如果让你实现 LRU 算法,你会怎么实现呢?除了用现有的结构 LinkedHa ...

  10. 用libvlc 播放指定缓冲区中的视频流

    有时候,我们需要播放别的模块传输过来的视频流,VLC提供了这样的机制,但一般很少这样用,下面的例子实现了这样的功能. 其中用到一个关键的模块 imem.  vlc提供多种创建媒体的方式,如要从指定缓存 ...