You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord库存爬取命令中undefined替换为OOS报错,求解决方案

问题:Discord商品库存爬取命令处理undefined库存值报错

我开发了一个用于爬取网站商品库存的Discord命令,当商品无库存时,返回值为undefined。我尝试把它替换成“Out Of Stock”,但用下面的代码时:

if(variant.inventory_quantity == undefined) { 
  let updatedStock = variant.inventory_quantity.replace("undefined", "Out Of Stock")
}

出现了**Error reading undefined ".replace()"**错误;改用:

if(variant.inventory_quantity == undefined) { 
  let stock = variant.inventory_quantity.toString(); 
  let updatedStock = stock.replace("undefined", "Out Of Stock")
}

又出现**Error reading undefined ".toString()"**错误。

相关核心代码如下:

axios.get(`${newLink}.json`).then((response) => {

    if (response.data.product.variants) {
        const { product } = response.data
        let productName = product.title
        atcEmbed.setColor("#2B2F51")
        atcEmbed.setTitle(`Product Found! 💥`)
        atcEmbed.setURL(link)
        atcEmbed.setThumbnail(product.images[0].src)
        product.variants.forEach((variant) => {
            let cleanlink = link.split('?').toString()
            let partarr = cleanlink.split("/")
            cleanlink = partarr.slice(0,3).join('/')
            var updatedLink = cleanlink + "/cart/" + variant.id + ":1".toString()

            atcEmbed.setDescription(`**Product:** ${productName}\n**Price:** ${variant.price}\n**SKU:** ${variant.sku}`)
            atcEmbed.addFields({ name: `${variant.title}`, value: `[ATC](${updatedLink})\n**Stock:** ${variant.inventory_quantity}\n${variant.id}`, inline: true })
        })

问题原因

当variant.inventory_quantity为undefined时,你直接调用它的replace()或toString()方法,但undefined本身没有这些方法,因此触发报错。

解决方法

不需要对undefined调用方法,直接通过条件判断赋值即可,有两种简洁实现方式:

  1. 嵌入字段内直接替换(最简便)
    使用空值合并运算符快速处理:
// 替换addFields中的库存部分
**Stock:** ${variant.inventory_quantity ?? "Out Of Stock"}

如果运行环境不支持空值合并运算符,改用兼容性写法:

**Stock:** ${typeof variant.inventory_quantity !== 'undefined' ? variant.inventory_quantity : "Out Of Stock"}
  1. 提前处理库存变量
    在循环内先处理好库存值,再嵌入字段:
product.variants.forEach((variant) => {
    // 先处理库存值
    let stockValue = variant.inventory_quantity ?? "Out Of Stock";
    // 兼容写法:let stockValue = typeof variant.inventory_quantity !== 'undefined' ? variant.inventory_quantity : "Out Of Stock";

    let cleanlink = link.split('?').toString()
    let partarr = cleanlink.split("/")
    cleanlink = partarr.slice(0,3).join('/')
    var updatedLink = cleanlink + "/cart/" + variant.id + ":1".toString()

    atcEmbed.setDescription(`**Product:** ${productName}\n**Price:** ${variant.price}\n**SKU:** ${variant.sku}`)
    atcEmbed.addFields({ name: `${variant.title}`, value: `[ATC](${updatedLink})\n**Stock:** ${stockValue}\n${variant.id}`, inline: true })
})

补充说明

  • 空值合并运算符??会在左侧值为undefined或null时返回右侧值,适合现代JavaScript环境。
  • 用typeof判断可以避免因variant.inventory_quantity字段不存在而触发的额外错误,兼容性更强。

内容的提问来源于stack exchange,提问作者JediSZN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 06:41:19