我想设置一个布尔值,我可以从options对象的属性中获取,或者如果未定义,则需要设置默认值。
const raw = options.rawOutput;
如果未设置options.rawOutput,则默认值应为true。 问题是:选项对象可能根本不存在。
我正在寻找比这样的更优雅的解决方案
if (options) {
if (options.rawOutput) {
raw = rawOutput;
}
} else {
raw = true;
}
答案 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获取 - 而不会影响您的代码。