【面试题】js 问号(?)的强大之处,你知道吗??
问号(?)的强大之处
一、问号点(?.)
obj: {
name: "末晨曦吖",
},
console.log(this.obj.age, "年龄"); //undefined
console.log(this.obj.hobby, "爱好"); //undefined
console.log(this.obj.age.data, "年龄"); //报错
console.log(this.obj.hobby.data, "爱好"); //报错
我们都知道第二个代码中打印的年龄和爱好是会报错的,因为我们在打印age和hobby时都已经是undefined的了,在undefined中有打印data属性肯定是没的了,也就报错了。
那我们都怎么避免这中值为空的问题而引发报错呢?
是的,我们可以使用前判断是否为空,若不为空时,我们再去拿其中的某个属性。
console.log(this.obj.age && this.obj.age.data, "年龄", this.obj.age.data);
console.log(this.obj.hobby && this.obj.hobby.data,"爱好",this.obj.hobby.data);
在代码中可以知道,我们在获取data属性时,首先判断前面的属性不为空在去获取。
这种方式呢我们用问号点也是可以实现的。
使用 (?.)实现判断案例:
//this.obj.age?.data === this.obj.age && this.obj.age.data
console.log(this.obj.age?.data, "年龄"); //undefined
console.log(this.obj.hobby.hobbydata, "爱好"); //报错
?.作用总结:
作用就是判断这个对象(this.obj)下的(age)下的(data)是否为null或者undefined,当其中一链为null或者undefined时就返回undefined,这样即使中间缺少一个属性也不会报错。
二、问号问号(??)
console.log(1 || "xx") //1
console.log(0 || "xx") //xx
console.log(null || "xx") //xx
console.log(undefined || "xx") //xx
console.log(-1 || "xx") //-1
console.log("" || "xx") //xx
console.log(1 ?? "xx") //1
console.log(0 ?? "xx") //0
console.log(null ?? "xx") //xx
console.log(undefined ?? "xx") //xx
console.log(-1 ?? "xx") //-1
console.log("" ?? "xx") //''
??作用总结:
使用方式就是与 或(||)相同用法,但是要注意的是??忽略0和空字符串等错误的值
?. 与 ??联合使用
let obj ={}
console.log(obj?.a?.b ?? 233 ) //233
let obj={a:{b:1}}
console.log(obj?.a?.b??233) //1
【面试题】js 问号(?)的强大之处,你知道吗??的更多相关文章
- js中console强大之处体现在哪
js中console强大之处体现在哪 一.总结 一句话总结:在我用过的浏览器当中,我是最喜欢Chrome的,因为它对于调试脚本及前端设计调试都有它比其它浏览器有过之而无不及的地方.可能大家对conso ...
- JavaScript-//FOR/IN循环。当使用for/in循环遍历关联数组时,就可以清晰地体会到for/in的强大之处。
<script> //FOR/IN循环.当使用for/in循环遍历关联数组时,就可以清晰地体会到for/in的强大之处. function getvalue(portfolio){ var ...
- 前端面试题 -- JS篇
前端面试题 -- JS篇 类型 1.js中有哪些数据类型,并解释清楚原始数据类型和引用数据类型 js中共有null,undefined, string,number,boolean,object六种数 ...
- Redis的强大之处
[Redis的强大之处] 1.拥有对脚本的支持(此处是lua),脚本可选择性的缓存. 2.提供HyperLogLog计数器. 3.提供5种数据类型的全方位支持:List.Hash.Set.Ordere ...
- 前端面试题(js)
js 基础面试题 css 面试题 js 面试题 JavaScript 有几种类型的值?,你能画一下他们的内存图吗 原始数据类型(Undefined,Null,Boolean,Number.String ...
- 前端基础面试题(JS部分)
1.几种基本数据类型?复杂数据类型?值类型和引用数据类型?堆栈数据结构? 基本数据类型:Undefined.Null.Boolean.Number.String 值类型:数值.布尔值.null.und ...
- 前端面试题 | JS部分(附带答案)
目前在找工作,所以各方收集了一堆面试题.其实刷面试题的过程也能更新自己对知识的认识,所以也提醒自己多看多理解.如果对下面题目有更深理解,会实时更新.遇到新题目,也会不定时更新.希望能帮助到部分朋友- ...
- 前端开发面试题JS
1.介绍js的基本数据类型. Undefined.Null.Boolean.Number.String. ECMAScript 2015 新增:Symbol(创建后独一无二且不可变的数据类型 ) 2. ...
- 微信前端面试题----js实现LazyMan
这是微信小程序的一道面试题,题目是这样的: 实现一个LazyMan,可以按照以下方式调用:LazyMan("Hank")输出:Hi! This is Hank! LazyMan(& ...
随机推荐
- IIS版本与Windows Server版本对应关系
IIS 6.0随着Windows XP Professional 64位和Windows Server 2003发布. IIS 7.0随着Windows Vista和Windows Server 20 ...
- C语言学习之我见-strlen()字符串长度函数
strlen()函数,负责给出字符串的长度.注意是字符串的长度,不是字符数组的长度. (1)函数原型: size_t __cdecl strlen(const char *_Str); (2)头文件` ...
- Python-安装lmdb失败-解决方法
使用pip install lmdb 时报错 ERROR: Command errored out with exit status 1: python setup.py egg_info Check ...
- 超 Nice 的表格响应式布局小技巧
今天,遇到了一个很有意思的问题,一名群友问我,仅仅使用 CSS,能否实现这样一种响应式的布局效果: 简单解析一下效果: 在屏幕视口较为宽时,表现为一个整体 Table 的样式 而当屏幕视口宽度较小时, ...
- .NET ORM框架HiSql实战-第三章-使用自定义编号生成【申请编号】
一.引言 上一篇.NET ORM框架HiSql实战-第二章-使用Hisql实现菜单管理(增删改查) 中菜单编号采用的是雪花ID,生成的编号无法自定义.比如本系统的一个申请业务,需要按前缀+日期+流水号 ...
- Spring 核心概念
Spring 核心概念 引言 本文主要介绍 Spring 源码中使用到的一些核心类 1. BeanDefinition BeanDefinition表示Bean定义,BeanDefinition 中存 ...
- java自定义注解实现执行所有要测试的接口
/* * 注解类 * */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Demo ...
- Python学习——实现文件交互的学生管理系统
第一次用写博客,从前一直在博客园上学习,现在也来这里分享一下我的学习成果. 就开门见山的说吧.首先做了一个流程图,可能也不符合啥规范,就当草稿用,将就着看,明白个设计思路就行. 1.首先系统初始化,定 ...
- 痞子衡嵌入式:MCUXpresso IDE下将源码制作成Lib库方法及其与IAR,MDK差异
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是MCUXpresso IDE下将源码制作成Lib库方法及其与IAR,MDK差异. 程序函数库是一个包含已经编译好代码和数据的函数集合,这 ...
- Linux学习系列--如何在Linux中进行文件的管理
文件 在常见的Linux的文件系统中,经常使用能了解到的文件管理系统是分为多个文件夹进行管理的. 如何查看文件路径 pwd ,在文件目录中,会有一个点(.)代表的是当前目录,两个点(..)代表的是当前 ...