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.
如果您给我们一个片段,这种混乱就可以避免,因为我们可以立即看到错误是什么,而不是依赖提问者对错误的可能不准确的描述。
添加回答
举报