猿问

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

我在这里做错了什么?


我在函数内部有如下所示的对象


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,我也不明白我错过了什么以及我做错了什么。


喵喵时光机
浏览 89回答 1
1回答

元芳怎么了

只能使用 var、let 和 const 创建对象(而不是属性)该语句未成功执行:var obj.level1 = {&nbsp; &nbsp; prop1 : 'some value 1',&nbsp; &nbsp; props2: 'somevalue 2'}我怀疑您没有注意到它产生的错误。在 Windows 版 Chrome 上,我在控制台中看到以下内容:Uncaught SyntaxError: Unexpected token '.'。由于该错误,当您尝试读取obj.level1.两种解决方案方案一:obj先创建,再设置其level1属性。var obj = {};obj.level1 = {&nbsp; prop1 : 'some value 1',&nbsp; props2: 'somevalue 2'}选项 2. 创建obj并level1一起。var obj = {&nbsp; level1: {&nbsp; &nbsp; prop1 : 'some value 1',&nbsp; &nbsp; props2: 'somevalue 2'&nbsp; }};在一个不相关的说明中,您的 newProps 函数格式错误你已经忘记return了allowHim。这是一个常见的错误,不用担心!您已经计算了值func()但没有返回它,因此新属性被正确报告为undefined!这就是您所需要的。function func() { // using this func for specific scenarios&nbsp; &nbsp; var allowHim = '';&nbsp; &nbsp; if(myConditionPassed){&nbsp; &nbsp; &nbsp; &nbsp; allowHim = true; // i need this to be added in my above obj&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; allowHim = false;// or this to be added in my above obj&nbsp; &nbsp; }&nbsp; &nbsp; return allowHim}作为补充说明,我建议您创建allowHim 变量,如下所示:let allowHim = null;这有两个理由是更可取的。首先,您将养成let尽可能使用变量的习惯,这使得变量尽可能本地化,从而减少错误。其次,您将初始值设置为 null,而不是''。它不会影响代码的工作方式,但它很有帮助,因为''是字符串的合理默认值,而不是布尔值。当您正在调试更复杂的程序时,如果您看到一个包含 的变量'',您可能会错误地怀疑它稍后应该包含一个字符串值。相反,如果您看到它包含null,您将不会得到错误的提示。以下是如何显示问题以及如何修复它您当前版本的问题具有以下代码:var obj.level1 = {&nbsp; &nbsp; prop1 : 'some value 1',&nbsp; &nbsp; props2: 'somevalue 2'&nbsp; &nbsp; newProps : func() --> want new property with true/ false}function func() { // using this func for specific scenarios&nbsp; &nbsp; var allowHim = '';&nbsp; &nbsp; if(myConditionPassed){&nbsp; &nbsp; &nbsp; &nbsp; allowHim = true; // i need this to be added in my above obj&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; allowHim = false;// or this to be added in my above obj&nbsp; &nbsp; }}代码中有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 = {}&nbsp;obj.level1 = {&nbsp; // DO NOT put a "var" on this line.&nbsp; &nbsp; prop1 : 'some value 1',&nbsp; &nbsp; props2: 'somevalue 2', // I have inserted the missing comma&nbsp; &nbsp; newProps : func() // If you want to comment, you need the "//" symbols}function func() {&nbsp;&nbsp; &nbsp; var allowHim = null;&nbsp; &nbsp; if(1 + 1 === 2){&nbsp; &nbsp; &nbsp; &nbsp; allowHim = true;&nbsp;&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; allowHim = false;&nbsp; &nbsp; }&nbsp; &nbsp; return allowHim; // Your original version was missing this.}console.log(obj.level1)如果您使用代码片段工具(“< >”图标)插入代码,您会立即发现错误 1、2 和 3当您手动输入代码时,会出现多个问题。首先,你留下了语法错误,回答者必须猜测解决方案。其次,您依赖于您自己正确传达错误消息。在您的情况下,您错误地传达了错误消息。你的问题说了以下几点:but when doing console.log(obj.level1); getting undefined因此我解释了导致这种情况发生的原因。但是,在花了一些时间尝试提供帮助之后,我现在意识到您的错误消息不是这样的,而是该属性未定义&nbsp;newProp,即console.log(obj.level1)&nbsp;is&nbsp;getting&nbsp;undefined.如果您给我们一个片段,这种混乱就可以避免,因为我们可以立即看到错误是什么,而不是依赖提问者对错误的可能不准确的描述。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答