【问题标题】:Why is a method on an object being true? [duplicate]为什么对象上的方法为真? [复制]
【发布时间】:2016-04-29 21:20:45
【问题描述】:

您能解释一下下面示例中ModelState.IsValidModelState.IsValid() 之间的区别吗? (他们都在工作)

var func = function () {
  var ModelState = {
    IsValid: function () {
      return true
    }
  };
  
  // ModelState.Isvalid() is working, too
  document.body.innerHTML = ModelState.IsValid 
      ? 'ModelState is valid' : 'ModelState is invalid'
};
<button onclick="func()">Click me</button>

正如您在上面看到的,ModelState 是一个 json 对象。如果我可以打电话给ModelState.IsValid,那么在这种情况下IsValid 是不是叫json property

【问题讨论】:

  • ModelState 不是 JSON 对象。它是一个对象文字。 IsValid 是 ModelState 对象字面量的一个属性。
  • @TarunDugar 是正确的。我认为您对调用不带括号的函数之间的区别感到困惑。这是一个类似的问题来帮助你stackoverflow.com/questions/3246928/…

标签: javascript


【解决方案1】:

IsValid 是一个函数。所以当你这样做ModelState.IsValid时,这将返回函数而不是它的值。

ModelState.IsValid() 这将执行它并给你返回值。

var func = function () {
  var ModelState = {
    IsValid: function () {
      return true
    }
  };
  
  console.log("ModelState.IsValid: ", ModelState.IsValid)
  
  console.log("ModelState.IsValid():", ModelState.IsValid())
  
  // ModelState.Isvalid() is working, too
  document.body.innerHTML = ModelState.IsValid 
      ? 'ModelState is valid' : 'ModelState is invalid'
};
<button onclick="func()">Click me</button>

现在,为什么三元运算符有效:

JS 尝试将值转换为Boolean。如果这不可能,则检查可用性。所以当你这样做时

if("")

它将""转换为00被认为是假的,但如果它有值,它被认为是真。

var a = "";

alert(a?true:false);

a = "function(){...}";

alert(a?true:false);

【讨论】:

  • 谢谢!我已经尝试过并看到了不同之处。但是当我将document.body.innerHTML = ModelState.IsValid ? 'ModelState is valid' : 'ModelState is invalid' 更改为document.body.innerHTML = ModelState.IsValid() ? 'ModelState is valid' : 'ModelState is invalid' 时。我得到了同样的结果。
  • 你能告诉我更多吗?
  • 我已经更新了我的答案。希望有帮助
  • 看起来像implicit conversion 'string' to 'boolean'
  • 是的。可以参考following post参考。
【解决方案2】:

如果我可以调用ModelState.IsValid,IsValid是不是在json属性中调用 这种情况?

ModelState 是一个对象字面量,isValid 是这个对象的一个​​属性。

如果您将代码更改为

document.body.innerHTML = ModelState.Isvalid 
      ? 'ModelState is valid' : 'ModelState is invalid'

它将输出ModelState is invalid

【讨论】:

  • 你没有改变任何代码
  • 为什么? ModelState.IsValid 是一个非空方法,它是真实的,所以看起来应该打印modelState is valid
  • @torazaburo 抱歉,有人编辑了代码,出于某种原因,该编辑被接受了!!
猜你喜欢
  • 2012-01-15
  • 1970-01-01
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
  • 2017-05-25
  • 1970-01-01
  • 2012-10-16
  • 2018-09-26
相关资源
最近更新 更多