引用:TypeError:无法从未定义中读取属性[此处为属性名称]



源自TypeError的标准问题在Google Apps Script 中无法[调用方法/read属性/set属性]为null


对以下问题的建议参考:

  • 为什么项目中GS文件的执行顺序会导致TypeError: Cannot read property "sayName" from undefined.
  • 测试触发器会导致ReferenceError: 'e' is not defined.TypeError: Cannot read property *...* from undefined
  • TypeError:无法读取属性";0";来自未定义
  • 谷歌脚本通过电子邮件发送表单值,错误:无法读取属性"namedValues<OP没有足够的细节,但有三个不同的答案,适用于不同的场景>
  • TypeError:无法调用方法";getName"个,共个未定义
  • TypeError:无法读取属性';值';(第3行,文件"代码"(。我有一个表单提交的触发器,但它仍然有一个错误属性名称中缺少字符(OP使用值而不是值(

描述

错误消息表示您正试图访问Object实例上的属性,但在运行时期间,变量实际持有的值是一种特殊的数据类型undefined

请参阅底部的关键术语定义

原因:

  • 访问不存在的对象的属性时发生错误

    如果对象中不存在某个属性,则访问该属性会导致未定义,并最终导致类型错误,如果像访问真实对象一样访问未定义。。这可能是由于打字错误或使用不区分大小写的名称来访问属性。此错误的变体(用数值代替属性名称(表明应为Array的实例。由于JavaScript中的数组是对象,所以这里提到的关于它们的一切都是正确的。

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请求或通过时间或基于事件的触发器调用函数。

错误是TypeError,因为应为"object",但收到的是"undefined"

如何修复

  1. 使用默认值
    如果左侧为nullundefined,JavaScript中的Nullish合并运算符??运算符将计算右侧。如果属性至少为undefined,则像(myVar ?? {}).myProp(或数组的(myVar ?? [])[index](这样的表达式将保证不会引发错误。

    也可以提供默认值:(myVar ?? { myProp : 2 })默认保证访问myProp返回2。阵列也是如此:(myVar ?? [1,2,3])

  2. 检查类型
    特别是在特殊情况下,typeof运算符与if语句和比较运算符相结合,将允许函数在其指定上下文之外运行(即用于调试目的(,或者根据对象是否存在引入分支逻辑。

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

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

关键术语

对象
它是JavaScript数据类型之一
undefined
它是JavaScript基元数据类型之一

要了解JavaScript数据类型和对象的基本知识,请参阅什么是JavaScript数据类型?物体究竟是什么?[JavaScript]。


从此处提取的原始修订版(记入@OlegValter(

相关内容

最新更新