如何检查对象是否为空?

Van*_*ack 8 javascript null object undefined

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

到目前为止,我知道一个变量可以是undefined

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

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

var car = "Opel";
Boolean(car); // true 
Run Code Online (Sandbox Code Playgroud)

任何没有价值的东西都是假的:

var car = ""; // typeof string, but it is empty, so
Boolean(car); // false
Boolean(null); // false 
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

不正确:

if (myObj === null) 
Run Code Online (Sandbox Code Playgroud)

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

但这仍然会引发错误:

不正确:

if (myObj !== null && typeof myObj !== "undefined")
Run Code Online (Sandbox Code Playgroud)

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

正确的:

if (typeof myObj !== "undefined" && myObj !== null)
Run Code Online (Sandbox Code Playgroud)

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

Adr*_*lid 12

检查对象是否为空:

Object.keys(yourObject).length
Run Code Online (Sandbox Code Playgroud)


Oth*_* Me 5

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

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

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

  • 为了确保 isEmpty 不会导致混乱,我认为更好的选择是:`var isEmpty = Object.entries(car).length === 0;` (5认同)

小智 0

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