【发布时间】:2022-01-12 08:21:13
【问题描述】:
我快疯了。我有一个名为 allAvailabilities
console.log(allAvailabilities[0]);
产生具有各种属性的对象,其中之一是:
...
isTrainee: true
...
但是
console.log(allAvailabilities[0]['isTrainee']);
console.log(allAvailabilities[0].isTrainee);
结果
false
false
我不明白是什么阻止我访问对象属性的实际 isTrainee 值:
console.log(typeof(allAvailabilities[0]['isTrainee']));
console.log(typeof(allAvailabilities[0].isTrainee));
console.log(allAvailabilities[0]['isTrainee'].toString());
console.log(allAvailabilities[0].isTrainee.toString());
结果:
boolean
boolean
false
false
这怎么可能?我是否忽略了基本的 Javascript 语法?这是否与此处所述的 Boolean 类有关:
Why does !new Boolean(false) equals false in JavaScript?
sn-p 工作正常,这是什么意思?
var allAvailabilities = [{_id: '605a5dd76f007e84f28e35fd', begin: '2021-04-03T18:00:00.000Z', end: '2021-04-03T20:30:00.000Z', season: 'regular', hostModel: 'users', isTrainee: true, season: "regular"}];
console.log(allAvailabilities[0]);
console.log(typeof(allAvailabilities[0]['isTrainee']));
console.log(typeof(allAvailabilities[0].isTrainee));
console.log(allAvailabilities[0]['isTrainee'].toString());
console.log(allAvailabilities[0].isTrainee.toString());
原始的allAvailabilities 数组来自一个 API,并且数组中的每个对象都被修改为具有像这样的isTrainee 属性,在调用代码之前我遇到了问题:
【问题讨论】:
-
请使其可重现。包含一个可运行的 sn-p(使用编辑器中的工具栏)来说明此行为,以便我们可以看到它。当您看到属性为 true 而不是 false 时,很可能您正在查看不同的对象(在同一个数组中)。
-
另一种可能性是你的数组被你的其余代码改变了,但是在你的
console.log之后。在这种情况下,控制台将显示对象的稍后内容,而不是在console.log时。见is console.log lazy? -
@trincot 我使用完全相同的代码添加了一个 sn-p,并且 sn-p 按预期工作。现在检查惰性的 console.log 帖子。
-
我确认这是懒惰的东西,因为在您的屏幕截图中(不应该是图像!请以文本形式发布),很明显订阅回调代码是在 之后执行的> 你做
console.log。 -
将依赖于您在
subscribe回调中所做处理的所有代码移动到该回调中(或在那里调用一个函数,或链接一个侦听器,...等)
标签: javascript boolean