Jen*_*Mok 4 javascript lodash reactjs
我能做,if(user) { //do something }但我看到人们用lodash做简单的检查.我已经阅读了lodash关于isEmpty的文档并且有方法,但是无法弄明白为什么作者会这样做.
import { isEmpty } from 'lodash';
if(isEmpty(user)) { //omg why? }
Run Code Online (Sandbox Code Playgroud)
Raj*_*esh 14
if(user) 将传递空的Object/Array,但它们是空的,应该被拒绝.
也if(user)将无法像值0或false这是完全有效的值.
使用isEmpty()将照顾这些价值观.此外,它使代码更具可读性.
点要注意的是isEmpty(1)将返回true作为1是一个变量,而不是一个数据结构,因此应该返回true.
这已在Docs中说明:
检查value是否为空对象,集合,映射或集合.
另外根据文档,
如果对象没有自己的可枚举字符串键控属性,则它们被视为空.
因此,如果您有一个没有非可枚举属性的对象,则将其视为空.在下面的示例中,foo是对象的一部分o并且可以使用o.foo但是因为它不可枚举,所以它被认为是空的,甚至for..in会忽略它.
var o = Object.create(null);
Object.defineProperty(o, "foo", {
enumerable: false,
value: "Hello World"
})
Object.defineProperty(o, "bar", {
enumerable: false,
value: "Testing 123"
});
console.log(o)
for (var k in o) {
console.log(k)
}
console.log(o.foo)
console.log(_.isEmpty(o))Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>Run Code Online (Sandbox Code Playgroud)
注意:这并不意味着您应该将lodash用于此目的.你可以编写自己的isEmpty函数.
以下是我使用的东西:
对于以下情况,这将返回true:
{},[],"",undefined,null,对象在上面的片段(没有枚举属性)function isEmpty(value){
return value === undefined ||
value === null ||
(typeof value === "object" && Object.keys(value).length === 0) ||
(typeof value === "string" && value.trim().length === 0)
}
Run Code Online (Sandbox Code Playgroud)
简单而优雅的函数,用于检查值是否为空
function isEmpty(value) {
const type = typeof value;
if ((value !== null && type === 'object') || type === 'function') {
const props = Object.keys(value);
if (props.length === 0 || props.size === 0) {
return true;
}
}
return !value;
}
Run Code Online (Sandbox Code Playgroud)
测试上述方法
对于以下所有情况,它将返回“true”
console.log(isEmtpy(null))
console.log(isEmtpy(0))
console.log(isEmtpy({}))
console.log(isEmtpy(new Set())
console.log(isEmtpy(Object.create(null))
console.log(isEmtpy(''))
console.log(isEmtpy(() => {}))
console.log(isEmtpy(() => [])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12296 次 |
| 最近记录: |