如果选项对象不存在,则使用默认设置布尔值

时间:2018-06-06 06:41:29

标签: javascript boolean javascript-objects

我想设置一个布尔值,我可以从options对象的属性中获取,或者如果未定义,则需要设置默认值。

const raw = options.rawOutput;

如果未设置options.rawOutput,则默认值应为true。 问题是:选项对象可能根本不存在。

我正在寻找比这样的更优雅的解决方案

if (options) {
  if (options.rawOutput) {
    raw = rawOutput;
  }
} else {
   raw = true;
}

6 个答案:

答案 0 :(得分:2)

您可以检查options是否存在以及属性rawOutput是否存在,然后取出该值,否则取true

raw = options && 'rawOutput' in options ? options.rawOutput : true;

或相同但没有conditional (ternary) operator ?:

raw = !options || !('rawOutput' in options) || options.rawOutput;

答案 1 :(得分:0)

我想使用typeof检查:

const raw = ((typeof options == 'undefined') || (typeof options.rawOutput == 'undefined'))? true:options.rawOutput;

答案 2 :(得分:0)

使用ES6的力量:

const { rawOptions: raw = true } = options || {};

使用object deseructuring获取rawOptions并将其分配给原始变量并使用默认值true

答案 3 :(得分:0)

如果您想要分配false,如果选项存在但rawOutput不存在,请尝试此操作。



const raw = options ? (options.rawOutput ? rawOutput : false) : true;




答案 4 :(得分:0)

您只需使用逻辑运算符

即可
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:background="@drawable/brick_wall">

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Title "
        android:layout_centerHorizontal="true"
        android:layout_marginTop="20dp"
        app:fontFamily="@font/balloon_extra_bold"
        android:textSize="50sp"
        android:textColor="@color/colorPrimaryLight" />
  <RelativeLayout 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/title"
       android:layout_centerParent="true">

        <Button
            android:id="@+id/button_players1"
            android:layout_width="143dp"
            android:layout_height="30dp"
            android:layout_centerHorizontal="true"
            android:background="@drawable/app_buttons"
            android:fontFamily="@font/balloon_extra_bold"
            android:gravity="center"
            android:text="1 Player"
            android:textColor="@color/black"
            android:textSize="20sp"
            />

    <Button
        android:id="@+id/button_players2"
        android:layout_width="145dp"
        android:layout_height="30dp"
        android:layout_below="@id/button_players1"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:background="@drawable/app_buttons"
        android:fontFamily="@font/balloon_extra_bold"
        android:gravity="center"
        android:text="2 Players"
        android:textColor="@color/black"
        android:textSize="20sp"
        android:layout_marginTop="15dp"/>


    <Button
        android:id="@+id/button_how_to_play"
        android:layout_width="148dp"
        android:layout_height="30dp"
        android:layout_below="@id/button_players2"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:background="@drawable/app_buttons"
        android:fontFamily="@font/balloon_extra_bold"
        android:gravity="center"
        android:text="How to Play"
        android:textColor="@color/black"
        android:textSize="20sp"
        android:layout_marginTop="15dp"/>
</RelativeLayout>

    <ImageView
        android:id="@+id/footer_logo"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="20dp"
        android:src="@drawable/logo" />

</RelativeLayout>

如果选项或options.rawOutput是假的,则将raw设置为true。

答案 5 :(得分:0)

当我们讨论options时,现在的方法是总是定义的对象,至少是默认值。因此,例如,在您的情况下,您将拥有:

// list of all defaults value for options
const defaultOptions = {
  rawOutput: true
}


// assuming you are in a function when you get the options
function doSomething(userOptions) {
  // here you will have all the options, with `userOptions`
  // overrides the default options if they're defined.
  const options = {...defaultOptions, ...userOptions};

  if (options.rawOutput) {
    // do stuff
  }
}

当您有多个选项可以传递时,这会很有用,而且大多数选项都可能有默认值。通过这种方式,您不必每次都检查是否存在任何对象或属性,并且您还可以清楚地列出可以更改的默认选项 - 或从JSON获取 - 而不会影响您的代码。