为了账号安全,请及时绑定邮箱和手机立即绑定

通过另一个函数添加新属性而不修改现有对象结构

通过另一个函数添加新属性而不修改现有对象结构

喵喵时光机 2023-08-05 20:48:56
我在这里做错了什么?我在函数内部有如下所示的对象function another(){        var obj.level1 = {            prop1 : 'some value 1',            props2: 'somevalue 2'            newProps : func() --> want new property with 1/ 2        }    }function func() { // using this func for specific scenarios        var setNewValue = '';        if(myConditionPassed){            setNewValue = 1; // i need this to be added in my above obj        } else {            setNewValue = 2;// or this to be added in my above obj        }    }但是当变得console.log(obj.level1);未定义时预期的:obj{   level1: {            prop1 : 'some value 1',            props2: 'somevalue 2'            newProps : 1        }}想过不发布这个帖子,虽然它非常简单,即使每天使用 JS,我也不明白我错过了什么以及我做错了什么。
查看完整描述

1 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

只能使用 var、let 和 const 创建对象(而不是属性)

该语句未成功执行:


var obj.level1 = {

    prop1 : 'some value 1',

    props2: 'somevalue 2'

}

我怀疑您没有注意到它产生的错误。在 Windows 版 Chrome 上,我在控制台中看到以下内容:Uncaught SyntaxError: Unexpected token '.'。


由于该错误,当您尝试读取obj.level1.


两种解决方案

方案一:obj先创建,再设置其level1属性。


var obj = {};

obj.level1 = {

  prop1 : 'some value 1',

  props2: 'somevalue 2'

}

选项 2. 创建obj并level1一起。


var obj = {

  level1: {

    prop1 : 'some value 1',

    props2: 'somevalue 2'

  }

};

在一个不相关的说明中,您的 newProps 函数格式错误

你已经忘记return了allowHim。这是一个常见的错误,不用担心!您已经计算了值func()但没有返回它,因此新属性被正确报告为undefined!这就是您所需要的。


function func() { // using this func for specific scenarios

    var allowHim = '';

    if(myConditionPassed){

        allowHim = true; // i need this to be added in my above obj

    } else {

        allowHim = false;// or this to be added in my above obj

    }

    return allowHim

}

作为补充说明,我建议您创建allowHim 变量,如下所示:


let allowHim = null;

这有两个理由是更可取的。首先,您将养成let尽可能使用变量的习惯,这使得变量尽可能本地化,从而减少错误。


其次,您将初始值设置为 null,而不是''。它不会影响代码的工作方式,但它很有帮助,因为''是字符串的合理默认值,而不是布尔值。当您正在调试更复杂的程序时,如果您看到一个包含 的变量'',您可能会错误地怀疑它稍后应该包含一个字符串值。相反,如果您看到它包含null,您将不会得到错误的提示。


以下是如何显示问题以及如何修复它

您当前版本的问题具有以下代码:


var obj.level1 = {

    prop1 : 'some value 1',

    props2: 'somevalue 2'

    newProps : func() --> want new property with true/ false

}


function func() { // using this func for specific scenarios

    var allowHim = '';

    if(myConditionPassed){

        allowHim = true; // i need this to be added in my above obj

    } else {

        allowHim = false;// or this to be added in my above obj

    }

}

代码中有4处错误。


故障1.它使用var在var obj.level1.


摆脱var. 想必您是obj在程序的早期创建的?所以我只是预先设置obj为 {}。如果您的程序之前已经将其设置为某项,则无需执行此操作。


故障2. 以下行缺少终端逗号。


props2: 'somevalue 2'

故障3.以下行有一条注释,您没有标记为注释。


newProps : func() --> want new property with true/ false

错误4. 的定义func不包含return 语句。


您在下面的评论中提到的返回语句的格式不正确。


这是一个有效的修订版本。


var obj = {} 


obj.level1 = {  // DO NOT put a "var" on this line.

    prop1 : 'some value 1',

    props2: 'somevalue 2', // I have inserted the missing comma

    newProps : func() // If you want to comment, you need the "//" symbols

}


function func() { 

    var allowHim = null;

    if(1 + 1 === 2){

        allowHim = true; 

    } else {

        allowHim = false;

    }

    return allowHim; // Your original version was missing this.

}


console.log(obj.level1)

如果您使用代码片段工具(“< >”图标)插入代码,您会立即发现错误 1、2 和 3

当您手动输入代码时,会出现多个问题。首先,你留下了语法错误,回答者必须猜测解决方案。其次,您依赖于您自己正确传达错误消息。

在您的情况下,您错误地传达了错误消息。你的问题说了以下几点:

but when doing console.log(obj.level1); getting undefined

因此我解释了导致这种情况发生的原因。

但是,在花了一些时间尝试提供帮助之后,我现在意识到您的错误消息不是这样的,而是该属性未定义 newProp,即

console.log(obj.level1) is getting undefined.

如果您给我们一个片段,这种混乱就可以避免,因为我们可以立即看到错误是什么,而不是依赖提问者对错误的可能不准确的描述。



查看完整回答
反对 回复 2023-08-05
  • 1 回答
  • 0 关注
  • 63 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信