js中出现undefined的几种情况:

1、在JS的严格模式下(“use strict”),没有明确的主体,this指的就是undefined。

"use strict";
console.log(this);  // {}
function hello(param) {console.log(this); // undefined
}
hello()
console.log(this);  // {}
function hello(param) {console.log(this);
}
hello()
// Object [global] {//   global: [Circular],
//   clearInterval: [Function: clearInterval],
//   clearTimeout: [Function: clearTimeout],
//   setInterval: [Function: setInterval],
//   setTimeout: [Function: setTimeout] {//     [Symbol(nodejs.util.promisify.custom)]: [Function]
//   },
//   queueMicrotask: [Function: queueMicrotask],
//   clearImmediate: [Function: clearImmediate],
//   setImmediate: [Function: setImmediate] {//     [Symbol(nodejs.util.promisify.custom)]: [Function]
//   }
// }

2、在变量提升(预解析)阶段,只声明未定义,默认值就是undefined

// 预解析阶段,变量只声明了,没有定义
// 预解析阶段就是变量声明的提升
var  add
console.log(add) // undefined

3、函数定义没有返回值(没有return)、return了但return后面什么也不带),默认的返回值就是undefined

function hello(params) {console.log('hello')
}
var namE = hello()
console.log(namE) // undefinedfunction nihao(params) {console.log('nihao')return
}
console.log(nihao()) // undefined

4、函数形参不传值,那么这个形参默认就是undefined

// es6中讲函数的时候有说过在es6中的函数形参默认值
// 没有es6的时候,大家是怎么给函数形参设置默认值的function hello(params, query) {console.log(params);console.log(query)
}
hello('ni','hao') // ni   hao
hello('you') // you  undefined

5、对象没有这个属性名。这个属性名默认是undefined。

const obj = {name: 'kf',sex: '男',age: 13
}
console.log(obj.name) // kf
console.log(obj.weight) // undefined

6、数组方法,find方法

find方法主要应用与 查找第一个符合条件的数组元素,找到后立马返回,跟some和every一样
返回通过测试(参数函数内判断)的数组的第一个元素的值

find() 方法返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined。

find的参数是一个回调函数,在回调函数中写你要查找元素的条件
数组中的每一个元素都会调用一次函数执行
条件成立为true的时候返回该元素,

var arrww = [1, 2, 3, 4];function hello() {return arrww.map((item) => item * 6);
}
console.log(hello()); //[ 6, 12, 18, 24 ]const arr = [2, 5, 9, 36];
const findItem =  arr.find(item  => item>35) console.log(findItem) // 36const findItem2 =  arr.find(item  => item>38)
console.log(findItem2) // undefined

7、可选链操作符

可选链操作符详细使用可参考

// 可选的链接运算符(?.)允许读取位于连接对象链深处的属性的值,
// 而不必明确验证链中的每个引用是否有效。// 问题描述:假设你有一个data对象,并且想要安全地访问data.test.value。
// 首先,你需要检查:data 是否被定义。data.test 是否被定义。const data = { test: { value: 1 } };
if (data && data.test) {console.log(data.test.value); // 1
}
const value = data?.test?.value;
console.log(value); // 在浏览器环境下其实是可以的,node环境下确执行不了console.log(data?.test.age) // undefined// ********* 可选链操作符为安全访问对象的某个属性值提供了便利,如果你不判断直接去用某个对象的某个属性很容易会引起错误// 再举一个例子
// 思考一个存在嵌套结构的对象 obj。不使用可选链的话,查找一个深度嵌套的子属性时,需要验证之间的引用,例如:
const obj = { first: { age: 16 } };
let nestedProp = obj.first && obj.first.second;// 为了避免报错,在访问obj.first.second之前,要保证 obj.first 的值既不是 null,也不是 undefined。如果只是直接访问 obj.first.second,而不对 obj.first 进行校验,则有可能抛出错误。// 有了可选链操作符(?.),在访问 obj.first.second 之前,不再需要明确地校验 obj.first 的状态,再并用短路计算获取最终结果:let nestedPropp = obj.first?.second;
// 通过使用 ?. 操作符取代 . 操作符,JavaScript 会在尝试访问 obj.first.second 之前,
// 先隐式地检查并确定 obj.first 既不是 null 也不是 undefined。如果obj.first 是 null 或者 undefined,表达式将会短路计算直接返回 undefine

8、直接调用函数,但是函数没有返回值。

let person = new (class {constructor(x) {this.name = x}sayName() {console.log(this.name)}
})('xiaoming')
console.log(person.sayName())  //  xiaoming   undefined// 打印undefined是因为函数没有返回值

出现undefined的几种情况相关推荐

  1. Dynamics CRM: 表单(Form)中的显示字段变成只读的几种情况

    有的时候,当我们打开一条记录, 我们会发现这条记录或者记录中的某个字段变成了不可编辑的状态, 但让表单中的显示字段变成只读的情况有很多, 你可以使用JS代码中的setDisabled, 也可以使用系统 ...

  2. promise.then返回结果几种情况

    Promise是ES6提出的异步编程的新解决方案,旧方案是单纯的使用回调函数.从语法上看,Promise是一个构造函数,既然是构造函数就可以用来对象的实例化,接受一个函数(执行器函数)作为参数,从功能 ...

  3. if语句判断真假的几种情况

    在写二叉树的最后判断二叉树是否为空的时候遇到if语句的判断竟然跟想得不一样!于是深入地了解了下if语句的判断真假的几种情况,发现还真有点东西-(自己果然是菜鸡hhhhhhhh) 这个是书本上的 i = ...

  4. 进一步封装axios并调用其读取数据(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)

    注意!!!(修改于2020年7月18日) 在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据 报错截图如下 报错内容: {&quo ...

  5. bartender外部表不是预期格式_批量合并Excel数据时“外部表不是预期格式”或“文件包含损坏数据”的两种情况...

    很多朋友在用Power Query合并(汇总)Excel数据时,碰到过"DataFormat.Error:外部表不是预期格式"或"DataFormat.Error:文件包 ...

  6. 对象的notify方法的含义和对象锁释放的三种情况

    1,notify的含义     (1)notify一次只随机通知一个线程进行唤醒 (2)在执行了notify方法之后,当前线程不会马上释放该对象锁,呈wait状态的线程也不能马上获得该对象锁, 要等到 ...

  7. linux下mv命令移动目录的二种情况

    mv 移动目录分为2种情况: 第一种:目标目录为空,使用mv命令可以直接移动,使用绝对路径执行或加参数-f 不会提示是否移动. [root@localhost ~]# mkdir 1 [root@lo ...

  8. C++对象模型2——编译器生成构造函数的几种情况

    如果程序员没有提供构造.析构.拷贝构造以及operator=,编译器并不会总是提供一个合成版本,比如下面的代码 class test{};int main(int argc, char const * ...

  9. Error LNK2001 无法解析的外部符号 的几种情况及解决办法

    Error LNK2001 无法解析的外部符号 的几种情况及解决办法 多线程下的单例模式 这里要处理的是懒汉模式. [cpp] view plain copy  class Singleton { p ...

最新文章

  1. jenkins 流水线(pipline)
  2. Java计算一段程序的运行时间
  3. Android測试APP工具(一)
  4. java 桥梁模设计,Java设计模式学习篇(九)桥接设计模式
  5. 2014年06月30日
  6. 公开征集 | 每个人都可以成为 COSCon'21 主论坛的开源明星
  7. shell开启飞行模式_今天才知道,原来手机的飞行模式用处那么多,看完涨知识了...
  8. jtessboxeditorfx 界面显示不出来_macOS 使用 XQuartz 支持 X11 实现 Linux 图形化界面显示...
  9. 数据库-MySQL-数据库和表
  10. ipsec over gre与gre over ipsec
  11. ofdm信道估计 线性插值matlab,OFDM信道估计的MATLAB仿真
  12. 修改jupyter notebook的默认浏览器
  13. 网络科学论坛纪要-2012
  14. python弹钢琴_python钢琴块自动脚本
  15. PCL中的OpenNI采集卡框架(The OpenNI Grabber Framework in PCL)
  16. MATLAB多因子模型代码,多因子模型详细.ppt
  17. 介绍HBuilder
  18. win10下docker搭建ES7集群
  19. 标题:2017-2018-20172309《程序设计与数据结构》课程总结
  20. PADS显示元件值并打印贴片图

热门文章

  1. python的getattr和setattr_getattr函数和setattr函数
  2. 【小程序】新版uniapp登录流程以及获取头像和昵称
  3. Android进阶——组件化开发实践(一)
  4. 18 feb 04 php,Ubuntu Server 18.04 与 OpenVPN 2.x
  5. 以太网交换机的自学习功能
  6. STM32之CAN通信
  7. 小白Python爬虫入门实例1——爬取中国最好大学排名
  8. Silverlight围棋单机版源码介绍
  9. 如何用JS写一套钉钉的机器人自动回复,要求调用chatgpt
  10. 用计算机学作文教学设计,网络作文教学设计