检查对象属性是否包含子字符串的安全方法

时间:2020-06-11 09:36:36

标签: javascript typescript

程序中有一个变量v,我想检查其属性p是否包含子字符串sub。我可以编写如下代码:

if (v.p.indexOf('sub') !== -1) {
    // do something here
}

但是,看到此代码时,我有些怀疑:

  1. 如果从未声明v怎么办
  2. 如果p中不存在属性v,该怎么办?
  3. 如果v.pnullundefined怎么办?
  4. 如果v.p不是字符串怎么办

我希望以上所有情况都不会在我的代码中引起错误,并且当do something here存在并且包含包含v.p的字符串时,仅sub

有人知道如何正确编写此代码吗?

1 个答案:

答案 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可选链接

相关问题