当前位置: 首页 > 知识库问答 >
问题:

如何解决TypeError:无法将未定义或null转换为对象

邹海超
2023-03-14

我编写了两个函数,可以有效地复制JSON.stringify(),将一系列值转换为stringify版本。当我将代码移植到JSBin并在一些示例值上运行它时,它运行得很好。但是我在一个专门为测试这个而设计的规范运行程序中遇到了这个错误。

我的代码:

  // five lines of comments
  var stringify = function(obj) {
  if (typeof obj === 'function') { return undefined;}  // return undefined for function
  if (typeof obj === 'undefined') { return undefined;} // return undefined for undefined
  if (typeof obj === 'number') { return obj;} // number unchanged
  if (obj === 'null') { return null;} // null unchanged
  if (typeof obj === 'boolean') { return obj;} // boolean unchanged
  if (typeof obj === 'string') { return '\"' + obj + '\"';} // string gets escaped end-quotes
  if (Array.isArray(obj)) { 
    return obj.map(function (e) {  // uses map() to create new array with stringified elements
        return stringify(e);
    });
  } else {
    var keys = Object.keys(obj);   // convert object's keys into an array
    var container = keys.map(function (k) {  // uses map() to create an array of key:(stringified)value pairs
        return k + ': ' + stringify(obj[k]);
    });
    return '{' + container.join(', ') + '}'; // returns assembled object with curly brackets
  }
};

var stringifyJSON = function(obj) {
    if (typeof stringify(obj) != 'undefined') {
        return "" + stringify(obj) + "";
    }
};

我从测试人员那里得到的错误消息是:

TypeError: Cannot convert undefined or null to object
    at Function.keys (native)
    at stringify (stringifyJSON.js:18:22)
    at stringifyJSON (stringifyJSON.js:27:13)
    at stringifyJSONSpec.js:7:20
    at Array.forEach (native)
    at Context.<anonymous> (stringifyJSONSpec.js:5:26)
    at Test.Runnable.run (mocha.js:4039:32)
    at Runner.runTest (mocha.js:4404:10)
    at mocha.js:4450:12
    at next (mocha.js:4330:14)

它似乎失败了:例如stringifyJSON(null)

共有3个答案

孟杰
2023-03-14

这对于在访问null或未定义对象的属性时避免错误非常有用。

空到未定义的对象

const obj = null;
const newObj = obj || undefined;
// newObj = undefined

未定义为空对象

const obj; 
const newObj = obj || {};
// newObj = {}     
// newObj.prop = undefined, but no error here

空到空对象

const obj = null;
const newObj = obj || {};
// newObj = {}  
// newObj.prop = undefined, but no error here
谢俊悟
2023-03-14

确保目标对象不是空的(nullundefined)。

可以使用空对象初始化目标对象,如下所示:

var destinationObj = {};

Object.assign(destinationObj, sourceObj);
孔权
2023-03-14

一般答案

当您调用一个函数,该函数期望一个对象作为其参数,但却传递undefined或null,例如

Object.keys(null)
Object.assign(window.UndefinedVariable, {})

由于这通常是错误的,解决方案是检查代码并修复空/未定义的条件,以便函数要么获得正确的对象,要么根本不被调用。

Object.keys({'key': 'value'})
if (window.UndefinedVariable) {
    Object.assign(window.UndefinedVariable, {})
}

特定于问题代码的答案

当给定null时,仅当给定字符串“null”时,行if(obj==='null'){return null;}//null unchanged才会求值。因此,如果将实际的null值传递给脚本,它将在代码的对象部分进行解析。和Object.keys(null)抛出前面提到的TypeError。要修复它,请使用if(obj==null){returnnull}-而不使用null周围的qoutes。

 类似资料:
  • 我正在我的反应应用程序中创建一个上一个和下一个按钮。我试图获取页面的当前索引(我有一个存储在对象中的页面列表) 这是密码 我得到的错误是“类型错误:无法将未定义或空转换为对象” 需要明确的是,imageName和images不是空的或未定义的(因为当I console.log它时,它有我需要的数据)。 提前谢谢!

  • 获取错误。我尝试做多个选择,并更改第二个选择的数据与第一个选择的上更改材料表行。我正在使用Firebase。 当“store.Urunler”为null或未定义时,我会出现此错误。而且我的产品没有列在菜单项上,这意味着选择是空的,但state.products有数据 我怎样才能克服这个错误。我还想添加到Urunler,选择一个输入。我知道我应该为onChanges调用函数,但如果它起作用,我以后会

  • 我正在运行一个React应用程序。 当我通过路由(单击按钮或链接)进入页面时,页面工作正常,但当我重新加载页面时,页面崩溃。我看不到错误在哪里,控制台和源代码显示为空,这是服务器消息控制台消息。 这是运行的代码。我尝试删除currentuser、addhabity和许多其他东西,只是为了了解错误的来源。没有结果。如果我通过链接进入页面,一切正常。 HabiddView.web.jsx 生活orm.

  • 我的职能是: 我在这条线上出错了。 我们需要解决它。请帮忙做。

  • 我试图检查是否为。但我得到了一个错误: 无法将null转换为对象 我该如何进行? 我正在检查组和用户是否存在,否则将添加它们。

  • 我正在尝试根据表所获得的数据动态呈现表。这一部分是有效的,但是当我实现了数据的过滤版本时,我在行上得到了TypeError Undefined或Null to object错误。 以下是供参考的数据(目前只是一些模拟数据): 它在我添加部分之前工作,我将tableData直接传递到,我不知道为什么。有人能帮我吗?