【问题标题】:Check IF condition return false but the statement inside IF still work in JavaScript检查 IF 条件返回 false 但 IF 中的语句在 JavaScript 中仍然有效
【发布时间】:2016-07-24 22:35:42
【问题描述】:

我有一个 JavaScript 检查对象是否存在,如下所示,在 .hamlc 中:

假设@object1 在这里不存在。

var property01;
// work as expected 
if (!#{@object1}) {
   console.log("not exist"); // print
} else {
   console.log("exist");
}

这项工作按预期工作,并在控制台中显示文本“不存在”,但有一种情况是如果 object1 确实存在,所以我想添加:

var property01;

if (!#{@object1}) { // should execute here and end the condition but not
   console.log("not exist"); // not print
   property01 = 'undefined';
} else {
   console.log("exist"); // not print as well
   property01 = '#{@object1.property01}'; // Delete this line will work normally but not what it should be.
}

上面返回一个错误说“无法读取未定义的属性'property01'。

我这样做的原因是另一个页面应用了这个可能有@object1在这里传递所以它取决于应用的页面但我只想让它工作无论对象“@object1”是否存在。

我知道当前@object1 是未定义的,因为它没有通过。因此,它应该只分配 IF 语句中所述的“未定义”,而不涉及 ELSE。这有什么问题吗??

【问题讨论】:

  • 无法读取 'property01' 的属性不存在,这就是为什么给出错误和错误,因为你试图分配不存在的 obj property01 = '#{@object1.property01}'
  • 是的,我知道如前所述,但即使它是错误的,为什么真实条件的陈述有效?它应该执行 IF 条件而不是 ELSE 条件
  • 查看我下面的帖子,如果未定义或为空,则跳转到 else 语句。

标签: javascript ruby-on-rails json coffeescript frontend


【解决方案1】:

我认为您不小心将 property01 设置为“未定义”字符串。如果您想保持脚本不变,只需在第 3 行删除它周围的引号:

if (!#{@object1}) { 
   console.log("not exist"); 
   property01 = undefined;
} else {
   console.log("exist");
   property01 = '#{@object1.property01}'; 

}

【讨论】:

  • 不,这是将object01内部的property01的值(如果存在)添加到变量的方法。如果 object1 确实存在,则变量将存储来自 object1.property01 的值。
【解决方案2】:

如果@object1 存在则分配给这个property01,否则分配给undefined

var property01;

   property01 = (!#{@object1}) ? '#{@object1.property01} : undefined 

【讨论】:

  • 我已经尝试过这个解决方案,但它不起作用,因为即使它是错误的 @object1.property01 仍然执行,因为它无法从未定义的属性中读取相同的错误。并且 property01 在 undefined 和对象的值(在这种情况下不存在)中都没有分配任何内容。总而言之,它不会跳转到 ELSE 语句。
猜你喜欢
  • 2011-04-12
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多