程序中有一个变量v
,我想检查其属性p
是否包含子字符串sub
。我可以编写如下代码:
if (v.p.indexOf('sub') !== -1) {
// do something here
}
但是,看到此代码时,我有些怀疑:
v
怎么办p
中不存在属性v
,该怎么办?v.p
是null
或undefined
怎么办?v.p
不是字符串怎么办我希望以上所有情况都不会在我的代码中引起错误,并且当do something here
存在并且包含包含v.p
的字符串时,仅sub
。
有人知道如何正确编写此代码吗?
答案 0 :(得分:2)
使用TS,您可以使用“可选链接”
例如
client.on('message', async message =>{
const prefix = "!";
const args = message.content.slice(prefix.length).trim().split(/ +/g);
const command = args.shift().toLowerCase();
if(message.content === '!ping'){
const msg = await message.channel.send("Checking for ping...") // Checking a message
var ping = Date.now() - message.createdTimestamp + " ms";
msg.edit("Pong ! " + message.member.user.tag + " my Ping is "`${Date.now() - message.createdTimestamp}` + " ms`");
// edit message from checking message to ping message
};
});
这是一种说法,当定义了foo时,将计算foo.bar.baz();但是当foo为null或未定义时,请停止我们正在执行的操作,然后返回未定义。”
更明确地说,该代码段与编写以下内容相同。
let x = foo?.bar.baz();
查看更多https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html可选链接