参考:类型错误:无法从未定义中读取属性[此处的属性名称]

2023-12-01

源自TypeError Cannot [call method / read property / set property] of null in Google Apps Script 的规范问题


建议参考以下问题:

  • Why the 项目中GS文件的执行顺序 causes TypeError: Cannot read property "sayName" from undefined.?
  • 测试触发器 causes ReferenceError: 'e' is not defined. or TypeError: Cannot read property *...* from undefined
  • 类型错误:无法从未定义中读取属性“0”
  • Google Script send form values by email, error: cannot read property "namedValues" Not enough details from the OP but three different answers that for different scenarios
  • 类型错误:无法调用未定义的方法“getName”
  • TypeError: Cannot read property 'value' of undefined (line 3, file "Code"). I have a trigger for on form submit and yet it still has an errorMissing character in property name (OP used value instead of values)

描述

该错误消息表明您正在尝试访问Object实例,但期间runtime价值actually变量所持有的是一种特殊的数据类型undefined.

See key terms definition at the bottom.

Causes:

  • 访问时出现错误对象的属性,该对象不存在.

    如果对象中不存在属性,则访问该属性会导致未定义,并最终导致类型错误(如果像访问真实对象一样访问未定义)。这可能是由于拼写错误或使用不区分大小写的名称来访问属性。此错误的一个变体是用数值代替属性名称,表明该错误的实例Array是预料之中的。正如 JavaScript 中的数组一样objects,这里提到的所有内容也适用于他们。

const obj = {a:1};
const b = obj.b;//undefined because b isn't available on obj. But doesn't throw a error
console.log(b.toString())//Throws type error 
  • 访问数组索引大于最后一个元素的索引

    Array.prototype.length 返回数组的元素数量。该数字始终大于最后一个元素的索引,因为 JavaScript 使用基于 0 的索引。访问任何大于或等于数组长度的索引都会导致此类型错误。例如,当访问长度数组中的第三个元素时3,

const a = [[1],[2],[3]];
const getElement3 = a[3];//undefined,because `3`'s index is ``2`` not `3`;But doesn't throw a error
console.log(getElement3[0])//Throws type error
  • 访问没有事件的事件对象:

    有一种特殊情况是动态构造的对象如事件对象仅在特定上下文中可用,例如向应用程序发出 HTTP 请求或通过时间或基于事件的触发器调用函数。

错误是一个类型错误因为一个"object"是预期的,但是"undefined"已收到

怎么修

  1. 使用默认值
    空合并运算符 ??JavaScript 中的运算符如果左侧是,则计算右侧null or undefined。像这样的表达(myVar ?? {}).myProp (or (myVar ?? [])[index]对于数组)将保证不会抛出错误,如果该属性至少是undefined.

    还可以提供默认值:(myVar ?? { myProp : 2 })保证访问myProp回来2默认情况下。数组也是如此:(myVar ?? [1,2,3]).

  2. 检查类型
    对于特殊情况尤其如此,typeof operator结合一个if 陈述 and a 比较运算符将允许函数在其指定上下文之外运行(即出于调试目的)或根据对象是否存在引入分支逻辑。

    人们可以控制检查的严格程度:

    • 宽松(“未定义”):if(typeof myVar !== "undefined") { //do something; }
    • 严格(“仅限适当的对象”):if(typeof myVar === "object" && myVar) { //do stuff }

关键术语

Object
It's one of the JavaScript data types.
undefined
It's one of the JavaScript primitive data types.

要了解 JavaScript 数据类型和对象的基础知识,请参阅JavaScript 数据类型是什么? and 到底什么是对象? [JavaScript].


Original revision extracted from here (Credit to @OlegValter)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

参考:类型错误:无法从未定义中读取属性[此处的属性名称] 的相关文章

  • 如何获取多个范围并将多个范围的值设置到另一个电子表格

    我想从范围 shUserForm Get Range B14 O100 中记录的内容将所有数据发送到另一个电子表格 我已经实现的是 当我单击或运行脚本时 我只从 B14 014 获取 1 个数据 而不是我希望每个列将其读取为 getRang
  • Blob 转换:获取 xlsx 文件

    我正在尝试发送一封电子邮件 其中包含xlsx文件已附加 但我遇到的问题是 当我下载该文件时 该文件以 PDF 格式打开 这是我的代码 function sendMail var sheet SpreadsheetApp getActiveS
  • 使用代码将 Google Apps 脚本函数分配给 Google 表格图像

    使用代码将 GOOGLE APPS 脚本功能分配给图像 通过单击 Google 表格中的图像并选择 分配脚本 选项 就可以实现这一点 但这是一项手动任务 我想将其自动化 可以将图像插入 Google 表格并使用 Apps 脚本代码分配函数
  • Typescript 上的 Drawflow 库

    我目前正在尝试实现 Jerosoler 制作的很棒的 Drawflow 库 在这里找到 https github com jerosoler Drawflow https github com jerosoler Drawflow 在我的
  • 是否可以使用 Google Docs API 插入水平规则?

    我一直在开发一个项目 需要使用 PHP 将文本和其他类型的元素插入 Google 文档文档中 我可以使用以下代码插入文本 requests requests new Google Service Docs Request insertTex
  • 您无权执行该操作

    我有一个时间触发的脚本 可以定期从外部源检索内容并用它更新 Google 网站页面 根据this https developers google com apps script guides triggers installable res
  • 如何制作应用程序脚本以立即允许访问 Google 电子表格中的所有导入元素? [复制]

    这个问题在这里已经有答案了 I have to work with google spreadsheets I am using some template spreadsheets which all contain a lot of l
  • 如何搜索 Google 电子表格?

    我正在进行一些详尽的搜索 需要确定电子表格中是否已存在新域 URL 然而 所有 Spreadsheet 对象都没有搜索功能 即大多数 Document 对象中的 findText 功能 我觉得我错过了一些重要的事情 我缺少什么 查找文本函数
  • Google 表单中的隐藏字段

    我正在为每次提交的表单添加一个唯一的 ID 现在 我将该 ID 设置为第一个字段 并预先填充了该 ID 以及要求用户不要修改该字段的帮助文本 是否有任何选项无法向用户显示此选项 我假设您只对在用户填写表单之前以编程方式分配唯一 ID 的方式
  • 未捕获的类型错误:未定义不是 indexOf 上的函数

    我目前有此代码来检查特定 ID 的网站 URL GET 选项 但每当运行此代码时 我都会收到一个奇怪的错误 Uncaught TypeError Undefined is not a function 这是我的代码 如果我能得到关于这个问题
  • Javascript:typeof表示“函数”,但它不能作为函数调用

    这次我对 Javascript 真的很困惑 var x Array prototype concat call typeof x function x Uncaught TypeError x is not a function 这里到底发
  • Google 脚本图表默认排除标题

    使用以下脚本 function chartCreation var ss SpreadsheetApp getActive var sheet ss getSheetByName Sheet1 var chart sheet newChar
  • 未记录的 Sheet API 限制问题

    我已经看过人们遇到类似问题的帖子 但找不到明确的答案 我尝试使用以下代码行检索 264735 个插槽的二维数组 var optionalArguments majorDimension ROWS valueRenderOption FORM
  • 显示未定义的实例

    可以采取任何措施来为未定义的值定义 Show 实例吗 也许存在一些 GHC 扩展 我想要这样的东西 gt print 1 undefined 1 undefined 根据Haskell 2010 报告 第 9 章 http www hask
  • 如何在链接到表单的工作表中执行 Google 工作表脚本之前等待 Google 表单脚本完成执行

    我有两个脚本 一个链接到 Google 表单 另一个链接到 Google 表格 我需要确保 Google 表单脚本在执行链接到 Google 表单的工作表的 Google 工作表脚本主体之前完成执行 如何才能做到这一点 需要等待 Googl
  • 在网页中显示 Google 工作表单元格的内容

    我有一个包含 html 代码的单元格的 google 工作表 我想知道在网页中显示此 html 的最佳方式 我尝试过谷歌电子表格 API 和谷歌可视化 API 以下是如何使用 Javascript 图表 API 显示单个单元格中的信息 也许
  • Apscheduler 运行一次然后抛出 TypeError

    我正在尝试每小时将某人的 soundcloud 关注者列表添加到数据库中 我有代码可以提取他们的关注者列表并将它们添加到数据库中 但是当我将它与 apscheduler 一起使用时 我遇到了错误 这是错误的示例 Traceback most
  • 如何检查 Gmail 标签是否有嵌套子标签?

    使用Google Apps脚本 是否有一个功能可以检查Gmail标签是否有嵌套子标签 如果标签有一个或多个子标签 我想将它们从代码序列中排除 没有直接的方法可以从 父 标签获取标签 但是使用简单的方法来获取标签非常简单getUserLabe
  • 从 Gmail 获取 pdf 附件作为文本

    我在网络和 Stack Overflow 上搜索但没有找到解决方案 我尝试做的事情如下 我通过邮件收到某些附件 我希望将其作为 纯 文本进行进一步处理 我的脚本如下所示 function MyFunction var threads Gma
  • 无法将 C 代码链接到 lapack / blas:未定义的引用

    我已经尝试了好几个小时了 这让我发疯 我得到的最后一个错误是 demo cblas c text 0x83 undefined reference to clapack sgetrf demo cblas c text 0xa3 undef

随机推荐