没有操作的JavaScript约定是什么?就像Python的pass命令一样。

  • 一个选项只是一个空函数:function() {}
  • jQuery提供了$.noop(),它仅调用上面的empty函数。
  • 可以简单地输入false0的值吗?

  • 在上下文中...所有这些工作都不会在Chrome中引发错误:
    var a = 2;
    (a === 1) ? alert(1) : function() {};
    (a === 1) ? alert(1) : $.noop();
    (a === 1) ? alert(1) : false;
    (a === 1) ? alert(1) : 0;
    

    编辑:很多人都回答:“不要这样做!更改代码结构!”这让我想起了一个帖子,有人问如何监听浏览器。他收到了许多帖子,说:“不要这样做!这很邪恶”,但是没人告诉他如何嗅探浏览器。这不是代码审查。想象一下,您正在处理无法更改的旧代码,并且如果没有传入某些函数,它将遗失一个错误。或简单地说,这就是客户想要的方式,他们正在向我付款。因此,敬请回答问题:在JavaScript中指定“无操作”功能的最佳方法是什么?

    EDIT2:其中之一怎么样?
    true;
    false;
    0;
    1;
    null;
    

    最佳答案

    为了回答原始问题,纯Javascript(也将在here中进行讨论)中的noop函数最优雅,最整洁的实现是 Function.prototype 。这是因为:

  • Function.prototype是一个函数:


  • 可以将其作为函数调用,并且基本上不执行任何操作,如下所示:



  • 尽管这是一个“真正的noop”,因为大多数浏览器似乎都不执行这种方式定义的noop(从而节省了CPU周期),但可能存在与此相关的性能问题(其他人在评论中或在其他答案)。

    但是,可以这么说,您可以轻松定义自己的noop函数,实际上,许多库和框架也提供noop函数。以下是一些示例:
    var noop = function () {};           // Define your own noop in ES3 or ES5
    const noop = () => {};               // Define in ES6 as Lambda (arrow function)
    setTimeout(noop, 10000);             // Using the predefined noop
    
    setTimeout(function () {} , 10000);  // Using directly in ES3 or ES5
    setTimeout(() => {} , 10000);        // Using directly in ES6 as Lambda (arrow function)
    
    setTimeout(angular.noop, 10000);     // Using with AngularJS 1.x
    setTimeout(jQuery.noop, 10000);      // Using with jQuery
    

    以下是按字母顺序排列的noop功能(或相关讨论或Google搜索)的各种实现的列表:

    AngularJS 1.x Angular 2+ (似乎没有本地语言
    实现-如上所示使用您自己的),EmberjQueryLodashNodeJSRamda React (似乎没有 native 实现-如上所示使用您自己的实现),RxJS
    Underscore

    底行:尽管Function.prototype是用Java语言表达noop的一种优雅方式,但是,可能存在一些与其使用有关的性能问题。因此,您可以定义和使用自己的代码(如上所示),也可以使用您可能在代码中使用的库/框架定义的代码。

    09-25 19:55