【问题标题】:Accessing a boolean property of an object in javascript always returns false? [duplicate]在javascript中访问对象的布尔属性总是返回false? [复制]
【发布时间】: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


【解决方案1】:

我认为是因为地图中有一个isTrainee的promise异步修改。我认为将地图更改为 for 可能会解决问题。 for 是一个同步函数而不是异步函数。

【讨论】:

  • 感谢您的评论,我已经编辑了我的原始帖子以在问题打印语句之前显示数组的修改。
  • 嗨,亚历克斯,你的消息更像是评论而不是我认为的答案。请考虑您应该发布的内容并查看指南
  • @Asa 请看看整理的答案对你有没有帮助
  • 不,将map 更改为for 不会解决问题。
猜你喜欢
  • 2017-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-10
  • 1970-01-01
  • 1970-01-01
  • 2017-06-25
相关资源
最近更新 更多