出现undefined的几种情况
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的几种情况相关推荐
- Dynamics CRM: 表单(Form)中的显示字段变成只读的几种情况
有的时候,当我们打开一条记录, 我们会发现这条记录或者记录中的某个字段变成了不可编辑的状态, 但让表单中的显示字段变成只读的情况有很多, 你可以使用JS代码中的setDisabled, 也可以使用系统 ...
- promise.then返回结果几种情况
Promise是ES6提出的异步编程的新解决方案,旧方案是单纯的使用回调函数.从语法上看,Promise是一个构造函数,既然是构造函数就可以用来对象的实例化,接受一个函数(执行器函数)作为参数,从功能 ...
- if语句判断真假的几种情况
在写二叉树的最后判断二叉树是否为空的时候遇到if语句的判断竟然跟想得不一样!于是深入地了解了下if语句的判断真假的几种情况,发现还真有点东西-(自己果然是菜鸡hhhhhhhh) 这个是书本上的 i = ...
- 进一步封装axios并调用其读取数据(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)
注意!!!(修改于2020年7月18日) 在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据 报错截图如下 报错内容: {&quo ...
- bartender外部表不是预期格式_批量合并Excel数据时“外部表不是预期格式”或“文件包含损坏数据”的两种情况...
很多朋友在用Power Query合并(汇总)Excel数据时,碰到过"DataFormat.Error:外部表不是预期格式"或"DataFormat.Error:文件包 ...
- 对象的notify方法的含义和对象锁释放的三种情况
1,notify的含义 (1)notify一次只随机通知一个线程进行唤醒 (2)在执行了notify方法之后,当前线程不会马上释放该对象锁,呈wait状态的线程也不能马上获得该对象锁, 要等到 ...
- linux下mv命令移动目录的二种情况
mv 移动目录分为2种情况: 第一种:目标目录为空,使用mv命令可以直接移动,使用绝对路径执行或加参数-f 不会提示是否移动. [root@localhost ~]# mkdir 1 [root@lo ...
- C++对象模型2——编译器生成构造函数的几种情况
如果程序员没有提供构造.析构.拷贝构造以及operator=,编译器并不会总是提供一个合成版本,比如下面的代码 class test{};int main(int argc, char const * ...
- Error LNK2001 无法解析的外部符号 的几种情况及解决办法
Error LNK2001 无法解析的外部符号 的几种情况及解决办法 多线程下的单例模式 这里要处理的是懒汉模式. [cpp] view plain copy class Singleton { p ...
最新文章
- jenkins 流水线(pipline)
- Java计算一段程序的运行时间
- Android測试APP工具(一)
- java 桥梁模设计,Java设计模式学习篇(九)桥接设计模式
- 2014年06月30日
- 公开征集 | 每个人都可以成为 COSCon'21 主论坛的开源明星
- shell开启飞行模式_今天才知道,原来手机的飞行模式用处那么多,看完涨知识了...
- jtessboxeditorfx 界面显示不出来_macOS 使用 XQuartz 支持 X11 实现 Linux 图形化界面显示...
- 数据库-MySQL-数据库和表
- ipsec over gre与gre over ipsec
- ofdm信道估计 线性插值matlab,OFDM信道估计的MATLAB仿真
- 修改jupyter notebook的默认浏览器
- 网络科学论坛纪要-2012
- python弹钢琴_python钢琴块自动脚本
- PCL中的OpenNI采集卡框架(The OpenNI Grabber Framework in PCL)
- MATLAB多因子模型代码,多因子模型详细.ppt
- 介绍HBuilder
- win10下docker搭建ES7集群
- 标题:2017-2018-20172309《程序设计与数据结构》课程总结
- PADS显示元件值并打印贴片图