为什么对象上的方法是真的?

时间:2016-01-23 07:33:05

标签: javascript

您能解释一下下面示例中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>
&#13;
&#13;
&#13;

如上所示,ModelState是一个json对象。如果我可以致电ModelState.IsValid,在这种情况下IsValidjson property吗?

2 个答案:

答案 0 :(得分:1)

  

如果我可以调用ModelState.IsValid,IsValid是否被称为json属性   这个案子?

ModelState是一个对象文字,isValid是此对象的属性。

如果您将代码更改为

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

它将输出ModelState is invalid

答案 1 :(得分:1)

IsValid是一个功能。因此,当您执行此操作ModelState.IsValid时,这将返回函数而不是其值。

ModelState.IsValid()这将执行它并为您提供返回值。

&#13;
&#13;
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'
};
&#13;
<button onclick="func()">Click me</button>
&#13;
&#13;
&#13;

现在,为什么三元运算符起作用:

JS尝试将值转换为Boolean。如果无法做到这一点,则检查可用性。所以当你这样做时

if("")

它会将""转换为0,而0会被视为false,但如果它有值,则视为true。

&#13;
&#13;
var a = "";

alert(a?true:false);

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

alert(a?true:false);
&#13;
&#13;
&#13;