为了账号安全,请及时绑定邮箱和手机立即绑定

这个构造是什么意思?

这个构造是什么意思?

这个构造是什么意思?我正在调试一些JavaScript,无法解释这是什么||有吗?function (title, msg) {   var title = title || 'Error';   var msg   = msg || 'Error on Request';}有人能给我个提示吗,这家伙为什么要用var title = title || 'ERROR'?我有时看到它没有var声明也是。
查看完整描述

3 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

什么是双管操作符(||)?

双管操作员(||)是逻辑OR操作者..在……里面大多数语言它的工作方式如下:

  • 如果第一个值是

    false

    ,它检查第二个值。如果是

    true

    ,它回来了

    true

    如果是

    false

    ,它回来了

    false.

  • 如果第一个值是

    true

    ,它总是会回来

    true

    无论第二个值是什么。

基本上,它的工作原理是这样的:

function or(x, y) {
  if (x) {
    return true;
  } else if (y) {
    return true;
  } else {
    return false;
  }}

      | true   false  ------+---------------true  | true   true   false | true   false

它在JavaScript中有何不同?

JavaScript有点不同,因为它是一个松散型语言..在这种情况下,这意味着您可以使用||具有非布尔值的运算符。虽然这没有任何意义,但是您可以使用这个运算符,例如,一个函数和一个对象:

(function(){}) || {}

如果值不是布尔值,JavaScript将生成隐式会话到布尔..它的意思是,如果价值是弗尔赛(例如。0""nullundefined(另见JavaScript中的所有Falsey值),它将被视为false,否则它会被视为true.

所以上面的例子应该给出true因为空函数是真实的。但事实并非如此。它返回空函数。那是因为JavaScript的||操作员不像我刚开始写的那样工作。它的工作方式如下:

  • 如果第一个值是

    法尔西

    ,它回来了

    第二值.

  • 如果第一个值是

    特鲁西

    ,它回来了

    第一值.

惊讶吗?实际上,它与传统的||接线员。

function or(x, y) {
  if (x) {
    return x;
  } else {
    return y;
  }}

如果你传递一个真实的值x,它回来了x这是一个真实的价值。所以如果你在后面使用它if条款:

(function(x, y) {
  var eitherXorY = x || y;
  if (eitherXorY) {
    console.log("Either x or y is truthy.");
  } else {
    console.log("Neither x nor y is truthy");
  }}(true/*, undefined*/));

你得到"Either x or y is truthy.".

如果x是弗尔西eitherXorY会是y..在这种情况下,您将得到"Either x or y is truthy."如果y是真实的,否则你会得到"Neither x nor y is truthy".

实际问题

现在,当你知道||操作员工作,您可以自己判断出什么是x = x || y刻薄。如果x是真实的,x分配给x,所以实际上什么都没有发生;否则y分配给x..它通常用于定义函数中的默认参数。然而,它通常被认为是不良编程实践,因为它阻止您传递Falsey值(这不一定是必需的)。undefinednull)作为参数。考虑以下例子:

function badFunction(/* boolean */flagA) {
  flagA = flagA || true;
  console.log("flagA is set to " + (flagA ? "true" : "false"));}

乍一看是有效的。但是,如果你通过了falseflagA参数(因为它是布尔型的,即可以是truefalse)? 它会变成true.在本例中,无法设置flagAfalse.

更好的办法是明确检查flagAundefined,就像:

function goodFunction(/* boolean */flagA) {
  flagA = typeof flagA !== "undefined" ? flagA : true;
  console.log("flagA is set to " + (flagA ? "true" : "false"));}

虽然它更长,但它总是有效的,而且更容易理解。


您也可以使用默认函数参数的ES6语法,但请注意,它在较旧的浏览器(如IE)中不起作用。如果您想支持这些浏览器,您应该使用巴贝尔.

另见MDN上的逻辑运算符.


查看完整回答
反对 回复 2019-06-05
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

如果没有设置标题,则使用“Error”作为默认值。

更一般的:

var foobar = foo || default;

读取:将foobar设置为foodefault..你甚至可以把它连在一起很多次:

var foobar = foo || bar || something || 42;


查看完整回答
反对 回复 2019-06-05
  • 3 回答
  • 0 关注
  • 659 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信