風雲論壇脚本中心 → 浏览:帖子主题
* 帖子主题:【分享】js 新增的 ??、??= 和 ?.
風雲 (ID: 3)
头衔:论坛版主
等级:光明使者
积分:449
发帖:29
来自:保密
注册:2022/3/30 15:28:53
造访:2022/12/6 10:24:37
[ 第 1 楼 ] 回复
* 空值合并操作符(??)
关于 ?? 的写法,最早见于 C#,PHP7 开始也支持这种写法,用于出现空值时指定一个默认值,其实 js 一直提供了一种可选方案,例如可以使用:
var nick = null || "Guest";
而新版支持了如下写法:
var nick = null ?? "Guest";

* 空值赋值运算符(??=)
左侧为null、undefined的时候,才会将右侧的值赋值给左侧。
var str;
str ??= "Black";
str ??= "White";
console.log(str);    // 输出 Black


* 可选链(.?)
?. 后面跟不存在的属性 也不会报错,返回 undefined。
例如,我们知道,如下代码会报一个 “Cannot read properties of undefined”的错误:
var obj = {};
console.log(obj.aaa.bbb);
但是我们如果改成如下代码:

[您可以先修改代码再运行]


会发现 obj.aaa 不存在,然后直接返回 undefined 了,不用担心后面的 getNick 方法会出错。

注:此语法不支持所有 IE 版本。
2022/4/10 8:08:57 IP:已设置保密
風雲 (ID: 3)
头衔:论坛版主
等级:光明使者
积分:449
发帖:29
来自:保密
注册:2022/3/30 15:28:53
造访:2022/12/6 10:24:37
[ 第 2 楼 ] 回复
不完美的地方是,js 无法使用这样的方式赋值:
var obj = {};
obj.user?.nick = "guest";
这样会报一个“Invalid left-hand side in assignment”的语法错误。
要是能像 php 一样可以使用
$obj['user']['children'][0]['nick'] = 'Guest';
自动链式形成数组和对象那就更完美了 😊😉😉
2022/4/10 8:26:51 IP:已设置保密
pojin (ID: 2)
等级:精灵
积分:117
发帖:1
来自:保密
注册:2022/3/30 11:42:27
造访:2022/12/5 23:24:22
[ 第 3 楼 ] 回复
学习了!~~
2022/4/10 11:39:26 IP:已设置保密
pojin (ID: 2)
等级:精灵
积分:117
发帖:1
来自:保密
注册:2022/3/30 11:42:27
造访:2022/12/5 23:24:22
[ 第 4 楼 ] 回复
移动端评论
2022/4/10 21:11:13 IP:已设置保密
分页: 1, 共 1 页
快速回复主题
账号/密码
用户: 没有注册? 密码:
评论内容