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.
如果您給我們一個片段,這種混亂就可以避免,因為我們可以立即看到錯誤是什么,而不是依賴提問者對錯誤的可能不準確的描述。
添加回答
舉報