使用|| Javascript中的{}

Teq*_*eq1 18 javascript

我在Javascript中看到过类似的内容:

   function name (secret) {
          secret = secret || {};
Run Code Online (Sandbox Code Playgroud)

我无法找到任何意味着什么秘密=秘密|| {};

这是否意味着创建具有传递参数或对象值的全局变量?

你什么时候使用它?什么时候没有参数传递?

h2o*_*ooo 26

这是什么意思

如果变量secret是假的(以下之一):

  • false
  • 0
  • '' (空字符串)
  • null
  • undefined
  • NaN

..然后将其设置为{}(一个空对象 - 它与之相同new Object()).


替代代码

它也可以写成:

if (!secret) secret = {};
Run Code Online (Sandbox Code Playgroud)

但是,由于时间越长,大多数人都更喜欢上述内容.


为什么?

此解决方案很有用,因为javascript没有默认的函数参数.

例如,PHP中的示例可能如下所示:

<?php
    function foo($bar = 'default') {
        echo $bar;
    }
?>
Run Code Online (Sandbox Code Playgroud)

在JS中可能

function foo(bar) {
    bar = bar || 'default';
    console.log(bar);
}
foo(); //default
foo(NaN); //default
foo(undefined); //default
foo(null); //default
foo(false); //default
foo(0); //default
foo(''); //default
foo('something'); //something
foo(12); //12
foo(1.2); //1.2
Run Code Online (Sandbox Code Playgroud)

如果我只是想,如果没有别的已被设置为设置默认?

如果你只是想检查是否有值(无falsy值),那么你可以使用typeof在JS功能:

function foo(bar) {
    if (typeof bar == 'undefined') bar = 'default';
    console.log(bar);
}
foo(); //default
foo(undefined); //default
foo(NaN); //NaN
foo(null); //null
foo(false); //false
foo(0); //0
foo(''); //(empty string)
foo('something'); //something
foo(12); //12
foo(1.2); //1.2
Run Code Online (Sandbox Code Playgroud)

  • 难道你不是说_"如果`秘密`****是空的......"_?此外,`typeof`测试是_not_等价的,因为除了`undefined`之外它不处理任何东西.(具有讽刺意味的是,`{}`也是一个假值,所以它会将`secret`重新分配给一个新的空对象,即使它是一个空对象.) (3认同)
  • 实际上,如果`secret`是任何"falsy"值(0,空字符串,`false`等),它也会将`secret`设置为`{}` (2认同)
  • `if(!secret)secret = {}` (2认同)