在redux 教程中它說:
const canSave = Boolean(title) && Boolean(content) && Boolean(userId)
- 但是 userId = 0 然后會轉換為 false
- 你不能只使用以下嗎?
const canSave = title && content && userId
uj5u.com熱心網友回復:
是的,您可以但想象一下,對于某些標題值,您會得到奇怪的結果。想象一下有人輸入false了他們的標題或內容。雖然不確定 userId
uj5u.com熱心網友回復:
在(可能有點不尋常)的情況下,必須明確地轉換為布林值,而不是檢查結果的真偽,而是針對另一個布林值。為了說明,以下邏輯失敗:
const title = '';
const content = 'content';
const userId = 'foo';
const canSave = title && content && userId;
if (canSave === false) {
console.log('cant save');
throw new Error();
}
console.log('saving...');
轉換canSave為布林值會解決這個問題。
但更 DRY 的方法是呼叫Boolean整個結果,而不是呼叫每個單獨的運算式。
const canSave = Boolean(title && content && userId);
但是 userId = 0 然后會轉換為 false
不知道你在說什么。如果這是一個問題,也許您想要的邏輯是typeof userId === 'number'?
uj5u.com熱心網友回復:
除了使用布林值,您始終可以使用此快捷方式:
const canSave = !!(title && content && userId)
但!!會將其轉換為布林值。
考慮例如您需要將布林值從您的服務器傳遞到客戶端,并且您不希望字串字串。
uj5u.com熱心網友回復:
如果將 TypeScript 與title && content && userId運算式一起使用,則運算式評估為 a string,TSC 將拋出型別不匹配錯誤,請參見以下示例:
import React, { useState } from 'react';
export default function Test() {
const [title, setTitle] = useState('');
const [content, setContent] = useState('');
const [userId, setUserId] = useState('');
return <button disabled={title && content && userId}>click me</button>;
}
錯誤:
型別 'string' 不可分配給型別 'boolean'.ts(2322) index.d.ts(2054, 9):預期型別來自屬性 'disabled',它在型別 'DetailedHTMLProps<ButtonHTMLAttributes, HTMLButtonElement> 上宣告'
所以你需要將字串轉換為布林值。從檔案布爾
不要使用
Boolean物件將非布林值轉換為布林值。要執行此任務,請改為使用Boolean函式或雙 NOT 運算子:
var x = Boolean(expression); // use this...
var x = !!(expression); // ...or this
所以代碼應該是:
const canSave = Boolean(title) && Boolean(content) && Boolean(userId);
// or
const canSave = !!title && !!content && !!userId;
他們兩個都沒問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/397931.html
標籤:javascript 反应
