From 4db9c44d18dddbbfdb91272c0b7612924d4e0ec4 Mon Sep 17 00:00:00 2001 From: VampireAchao Date: Mon, 13 Mar 2023 18:23:14 +0800 Subject: [PATCH] =?UTF-8?q?[feature]=20=E6=96=B0=E5=A2=9EBooleanUtil.isJsF?= =?UTF-8?q?alsy=E4=BB=A5=E5=8F=8AisJsTruthy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/hutool/core/util/BooleanUtil.java | 26 +++++++++++++++++ .../cn/hutool/core/util/BooleanUtilTest.java | 28 ++++++++++++++++++- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/util/BooleanUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/BooleanUtil.java index 6825f0c07..24bd72b1b 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/BooleanUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/BooleanUtil.java @@ -17,6 +17,8 @@ public class BooleanUtil { private static final Set TRUE_SET = SetUtil.of("true", "yes", "y", "t", "ok", "1", "on", "是", "对", "真", "對", "√"); /** 表示为假的字符串 */ private static final Set FALSE_SET = SetUtil.of("false", "no", "n", "f", "0", "off", "否", "错", "假", "錯", "×"); + /** js中表示假值Falsy的部分值 false、0、-0、0n、""、null、undefined 和 NaN */ + public static final Set FALSY_SET = SetUtil.of(false, 0, -0, 0L, 0.0D, -0.0D, "", null); /** * 取相反值 @@ -522,4 +524,28 @@ public class BooleanUtil { public static boolean isBoolean(final Class clazz) { return (clazz == Boolean.class || clazz == boolean.class); } + + /** + * 是否为假值(定义来源js) + * + * @param value 参数 + * @return 是否为假值 + * 定义{@see https://developer.mozilla.org/zh-CN/docs/Glossary/Falsy} + */ + public static boolean isJsFalsy(Object value) { + return FALSY_SET.contains(value); + } + + /** + * 是否为真值(定义来源js) + * 所有除 false、0、-0、0n、""、null、undefined 和 NaN 以外的皆为真值 + * 由于java中无法使用值来代表undefined 和 NaN,因此此处不做判断 + * + * @param value 参数 + * @return 是否为真值 + * 定义{@see https://developer.mozilla.org/zh-CN/docs/Glossary/Truthy} + */ + public static boolean isJsTruthy(Object value) { + return false == isJsFalsy(value); + } } diff --git a/hutool-core/src/test/java/cn/hutool/core/util/BooleanUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/BooleanUtilTest.java index d143ab03b..f6314eae6 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/BooleanUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/BooleanUtilTest.java @@ -86,7 +86,7 @@ public class BooleanUtilTest { @SuppressWarnings("ConstantConditions") @Test - public void toBooleanObjectTest(){ + public void toBooleanObjectTest() { Assert.assertTrue(BooleanUtil.toBooleanObject("yes")); Assert.assertTrue(BooleanUtil.toBooleanObject("真")); Assert.assertTrue(BooleanUtil.toBooleanObject("是")); @@ -95,4 +95,30 @@ public class BooleanUtilTest { Assert.assertNull(BooleanUtil.toBooleanObject(null)); Assert.assertNull(BooleanUtil.toBooleanObject("不识别")); } + + @Test + public void isJsFalsyTest() { + Assert.assertTrue(BooleanUtil.isJsFalsy(false)); + Assert.assertTrue(BooleanUtil.isJsFalsy(0)); + Assert.assertTrue(BooleanUtil.isJsFalsy(-0)); + Assert.assertTrue(BooleanUtil.isJsFalsy(0L)); + Assert.assertTrue(BooleanUtil.isJsFalsy(0.0D)); + Assert.assertTrue(BooleanUtil.isJsFalsy(0.00D)); + Assert.assertTrue(BooleanUtil.isJsFalsy(-0.00D)); + Assert.assertTrue(BooleanUtil.isJsFalsy("")); + Assert.assertTrue(BooleanUtil.isJsFalsy(null)); + } + + @Test + public void isJsTruthyTest() { + Assert.assertTrue(BooleanUtil.isJsTruthy(true)); + Assert.assertTrue(BooleanUtil.isJsTruthy(1)); + Assert.assertTrue(BooleanUtil.isJsTruthy(-1)); + Assert.assertTrue(BooleanUtil.isJsTruthy("0")); + Assert.assertTrue(BooleanUtil.isJsTruthy("null")); + Assert.assertTrue(BooleanUtil.isJsTruthy("undefined")); + Assert.assertTrue(BooleanUtil.isJsTruthy(1L)); + Assert.assertTrue(BooleanUtil.isJsTruthy(0.1D)); + Assert.assertTrue(BooleanUtil.isJsTruthy(-0.01D)); + } }