对Javascript感到困惑。布尔函数可以作为void函数吗?

时间:2015-03-23 14:07:19

标签: javascript

我正在尝试为即将到来的采访刷新一些Javascript知识。我正在阅读a blog,上面写着

  

“如果删除成功,则删除操作符返回true。”

然后显示了一个使用它的示例:

var christmasList = {mike:"Book", jason:"sweater" }
​delete christmasList.mike; // deletes the mike property​

在该示例中,看起来deletevoid函数的方式使用(在一般编程意义上 - 我知道JS不需要像void这样的声明) 将会。

有人可以向我解释,或者给我一个链接,说明JS函数如何使用不同的返回值进行操作的文档,这样做是否需要为每个返回值单独实现?

5 个答案:

答案 0 :(得分:3)

  

在该示例中,看起来像删除以void函数

的方式使用

删除运算符不是函数,而是运算符。它处理对象的属性,而不是它们的值。


功能是别的,但是你问:

  

有人可以向我解释JS函数如何使用不同的返回值

JavaScript的输入类型很松散。函数不关心值的类型,除非它们需要,并且(大多数时候)类型之间的转换由运算符处理。

如果一个函数需要关于它的操作,那么它必须检查该值以查看它是什么。

例如:

function myFunction(myArgument) {
    if (typeof myArgument === "function") {
        return myArgument();
    } else {
        return myArgument;
    }
}

函数可以返回它喜欢的任何值。

function string_or_number() {
    if (Math.random() > 0.5) {
        return 1;
    } else {
        return "1";
    }
}

强类型语言关心函数返回什么类型的值以及将哪种类型的值传递给参数。

松散打字的人根本就没有。从使用该语言的人的角度来看,没有什么特别之处。

它避免了大多数关于必须关心编译器作者的类型而不是编译器的用户的复杂性(他们只需要关心,如果一个函数被设计为对鸭子做某事,他们传递的是足够像一只鸭子,不破坏功能)。

答案 1 :(得分:3)

您可以查看Delete operator,其中包含:

  

如果desc。[[Configurable]]为真,那么

     
      
  • 从O中删除名为P的自有属性。

  •   
  • 返回true。

  •   

请注意,删除仅适用于对象的属性。同样好的阅读: - JavaScript Delete() Only Affects The Referenced Object Regardless Of Prototype Chain

答案 2 :(得分:2)

正如其他人所说,delete在技术上是一个操作员而不是一个功能;然而,对于我们直接关注的问题,不同之处在于学术上的差异,因为操作员的行为与用于其副作用的许多函数(即无效函数)的行为相同。语言规则和使用惯例都很简单。

<强>规则

  1. 所有功能都提供返回值;如果未达到return语句,则为undefined
  2. <强>会展

    由于我们总是获得回报价值,我们可以利用它来改进我们的计划。有两种惯例;应该使用哪一个取决于用例。

    1. 返回布尔值,表示信号成功或失败
    2. 返回正在操作的对象
    3. 选项2对于对象上的方法最有用:如果我们的方法更改了对象的状态然后返回对象,我们可以将几个更改捆绑到一行方法调用中:object.change1().change2().change3(newVal);

      当我们想要使用操作的成功或失败来确定程序流时,选项1最有用;也许我们想要在没有删除属性的情况下抛出异常,但是如果属性那样则继续正常。然后我们可以使用if (delete object.property)尝试删除属性并立即分支成功/失败案例。

答案 3 :(得分:0)

Javascript函数总是返回ambigious值。一个函数可以返回boolean,string,object,array或HTMLElement。

没有固定类型。

function masterSwitch(input) {
    switch(input) {
       case 0 : return "Hello";
       case 1 : return 0xdead;
       case 2 : return 0.00042;
       case 3 : return document.createElement("DIV");
       case 4 : return true;
       case 5 : return window;
       case 6 : return this;
       case 7 : return null;
       default:window.alert("Please specify input from 0 to 8");
    }

}
<input type="text" id="output"> <SELECT onchange="document.getElementById('output').value = typeof masterSwitch(this.selectedIndex);">
<option>string</option>
<option>int</option>
<option>float</option>
<option>HTMLElement</option>
<option>boolean</option>
<option>window</option>
<option>this</option>
<option>null</option>
</select>

答案 4 :(得分:0)

来自MDN on the delete operator

  

如果属性是自己的不可配置属性,则以严格模式抛出(在非严格中返回false)。在所有其他情况下返回true。

我不能比这更简单。除了一个小例子:

alert(delete window.window)
alert(delete window.foobar)
alert(delete window.alert)