如何检查对象是否为空?

时间:2021-01-27 19:32:38

标签: javascript object null undefined

我正在学习 JavaScript。我无法理解一个空物体的概念。据我了解,在某些情况下,我需要检查一个变量是否包含一个对象和一个值。

到目前为止,我知道一个变量可以未定义

var car; // the value is undefined, as well as the type (which is it? number, array, etc.)

我也知道,所有有价值的东西都是真实的

var car = "Opel";
Boolean(car); // true 

任何没有值的都是假的:

var car = ""; // typeof string, but it is empty, so
Boolean(car); // false
Boolean(null); // false 

那么为什么它与数组和对象的工作方式不同呢?为什么这一切真实?空数组和对象不应该返回 false 吗?

var car = {make: "Opel", year: 2015};
Boolean(car); // true
car = {};
Boolean(car); // true
car = ["BMW", "Opel"]; 
Boolean(car); // true
car = [];
Boolean(car); // true

现在我看到有一些方法可以用来检查对象的长度,我只是还没有达到那个部分。

我正在 W3Schools 网站上学习,这让我很困惑:

但是你不能测试一个对象是否为空,因为如果对象未定义,这将抛出一个错误:

不正确:

if (myObj === null) 

要解决这个问题,你必须测试一个对象是否不为空,不为未定义。

但这仍然会引发错误:

不正确:

if (myObj !== null && typeof myObj !== "undefined")

因此,您必须先测试 not undefined,然后才能测试 not null:

正确:

if (typeof myObj !== "undefined" && myObj !== null)

我仍然无法理解这里的最后一行。

7 个答案:

答案 0 :(得分:6)

检查对象是否为空:

Object.keys(yourObject).length

答案 1 :(得分:3)

var car = {};
var isEmpty = Object.entries(car).length > 0; //false

var car = {make: "Opel", year: 2015};
var isEmpty = Object.entries(car).length > 0; //true

这应该可以解决您的问题,如果您对实用函数 Object.entries 感到好奇,您可以查看 mdn

答案 2 :(得分:0)

我总是使用 typeof myvar !== 'undefined' 并检查内容 myvar !== '' 这总是会有一个明确的结果。

答案 3 :(得分:0)

JavaScript 中存在Truthy 和Falsy 值的概念。 我强烈建议您阅读有关此问题的 MDN 文档。

<块引用>

所有值都是真值,除非它们被定义为假(即,假、0、-0、0n、""、null、undefined 和 NaN 除外)。

Truthy values

Falsy values

答案 4 :(得分:0)

不,它们不应该是假的。

所有对象都是“真实的”,因为它们在作为布尔值计算时返回 true。在 Javascript 中,所有数组都是对象(尝试 console.log(typeof [])),因此它们也返回 true,无论它们是否为空。

检查数组是否为空:

if (MYARRAY.length === 0) {
  // console.log(true);
}

检查对象是否为空:

if (Object.keys(MYOBJECT).length === 0) {
  // console.log(true);
}

答案 5 :(得分:0)

你可以使用

  if ($('#element').is(':empty')){
  //do something
  }

function isEmpty( el ){
      return !$.trim(el.html())
  }
  if (isEmpty($('#element'))) {
      // do something
  }

以下是一些示例:http://api.jquery.com/is/

但如果您需要在 JavaScript 中使用它:

if( typeof foo !== 'undefined' ) {
    // foo could get resolved and it's defined
}

你可以简单地使用 typeof

答案 6 :(得分:0)

<块引用>

我也知道,所有有价值的东西都是真实的

我不会那样说。给出的所有示例都是,甚至 undefinednull 都是 JavaScript 中的预定义值。

<块引用>

空数组和对象不应该返回false吗?

规范就是这样。这确实是您问题的答案。这是语言设计者的选择。

不过你可以在其中找到一些逻辑。在 JavaScript 中,表示对象(以及数组)的值是引用。这些引用是内存地址/指针,虽然您无法找出这些地址的确切含义,但即使对象没有属性,这些引用也是非零的。

请注意,您的示例对象({}[])仍然具有一些不可枚举的属性,例如 __proto__ 和(对于数组)length,因此它们是没有你想象的那么空虚。

您可以创建的最多空对象是:Object.create(null)