亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過另一個函數添加新屬性而不修改現有對象結構

通過另一個函數添加新屬性而不修改現有對象結構

喵喵時光機 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 關注
  • 108 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號