es6判断字符串中是否有某个字符串(es6新增的运算符-链判断运算符的诞生[?.]和null的判断运算符??)
导读:指数运算符 ** console.log(2 ** 2 //4 console....
指数运算符 **
console.log(2 ** 2 ) //4
console.log(2 ** 3 ) //8
console.log(2 ** 4) //16
链判断运算符的诞生(?.)
在实际编程中 ,
如果读取对象内部的某个属性 ,往往需要判断一下 。
属性的上层对象是否存在 。比如 ,读取 message.body.user.firstName这个属性 ,安全的写法是写成下面这样 。
let message={
body:{
user:{
firstName:
}
}
}
// 错误的写法;因为这message.body这个值可能没有 ,会导致报错
const firstName = message.body.user.firstName || default;
// 正确的写法
const firstName = (message
&& message.body
&& message.body.user
&& message.body.user.firstName) || default;
有的小伙伴可能会觉得这样会很麻烦 ,怎么会处理这个问题了 。
//使用链式运算符
let myDefault= message?.body?.user?.firstName || 默认值;
/**
* 上面代码中 ,如果message是null或undefined ,
* 或者message.body是null或undefined ,
* 或者message.body.user是null或undefined ,
* 或者message.body.user.firstName是null或undefined.
* 就会返回--默认值 。
* */
链判断运算符(?.)的详细讲解
?.运算符 ,直接在链式调用的时候判断 。
左侧的对象是否为null或undefined 。
如果是的 ,就不再往下运算,而是返回undefined
本质上 ,?.运算符相当于一种短路机制 ,只要不满足条件,就不再往下执行 。
链判断运算符-判断对象是否有某个方法
let message={
// say:function(){
// console.log(hello word)
// }
}
//如果没有该方法 ,则不会被执行的哈
message.say?.()
//返回undefined
console.log(message.say?.())
Null 判断运算符 ( ?? )
读取对象属性的时候 ,如果某个属性的值是null或undefined ,
有时候需要为它们指定默认值 。常见做法是通过||运算符指定默认值 。
const headerText = response.settings || Hello, world!;
const animationDuration = response.settings || 300;
但是我们开发者的意愿是:
只要属性的值为null或undefined ,默认值就会生效 ,
但是实际属性的值如果为空字符串或false或0 ,默认值也会生效 。(与我们的初衷相违背)
为了避免这种情况 ,ES2020 引入了一个新的 Null 判断运算符?? 。
它的行为类似|| ,但是只有运算符左侧的值为null或undefined时 ,才会返回右侧的值。
const headerText = response.settings ?? Hello, world!;
const animationDuration = response.settings ?? 300;
上面代码中 ,默认值只有在左侧属性值为null或undefined时 ,才会生效 。
const animationDuration = response.settings?. animationDuration ?? 300;
上面代码中 ,
如果response.settings是null或undefined,
或者response.settings.animationDuration是null或undefined ,
就会返回默认值300 。
也就是说 ,这一行代码包括了两级属性的判断。
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!