亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

這個構造是什么意思?

這個構造是什么意思?

這個構造是什么意思?我正在調試一些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條經驗 獲得超5個贊

如果沒有設置標題,則使用“Error”作為默認值。

更一般的:

var foobar = foo || default;

讀?。簩oobar設置為foodefault..你甚至可以把它連在一起很多次:

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


查看完整回答
反對 回復 2019-06-05
  • 3 回答
  • 0 關注
  • 716 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號