NeuroAgent

How to Check JavaScript Variable for Undefined or Null

Learn the correct ways to check JavaScript variables for undefined or null values. Discover why comparing to 'undefined' string fails and get working code examples for null checking in JavaScript.

Question

How can I properly check if a JavaScript variable is undefined or null?

I’m trying to determine if a variable is undefined or null in my JavaScript code, but I’m encountering an issue where the interpreter halts execution. Here’s my current code:

javascript
var EmpName = $("div#esd-names div#name").attr('class');
if(EmpName == 'undefined'){
  // DO SOMETHING
};

And here’s the corresponding HTML:

html
<div id="esd-names">
  <div id="name"></div>
</div>

What’s the correct way to check if a variable is undefined or null in JavaScript, and why is my current approach causing the interpreter to halt execution?

NeuroAgent

JavaScript has several ways to properly check if a variable is undefined or null. The issue with your current approach is that you’re comparing against the string 'undefined' rather than checking for the actual undefined value that jQuery returns when an attribute doesn’t exist.

The correct way to check for both undefined and null is using strict equality or the double equals operator, as both values are considered “nullish” in JavaScript:

javascript
var EmpName = $("div#esd-names div#name").attr('class');

// Method 1: Check for both undefined and null at once
if (EmpName == null) {
  // This handles both undefined and null
}

// Method 2: Explicit checks
if (EmpName === undefined || EmpName === null) {
  // This handles both separately
}

// Method 3: Using typeof for undefined check only
if (typeof EmpName === 'undefined' || EmpName === null) {
  // Separate checks
}

Your current code if(EmpName == 'undefined') compares the actual undefined value (returned by jQuery) with the string 'undefined', which returns false. The interpreter might be halting due to an error elsewhere in your code, or because jQuery itself might throw an error in certain contexts.

Contents

Understanding Undefined and Null in JavaScript

In JavaScript, undefined and null are two distinct primitive values that represent the absence of a meaningful value:

  • undefined: A primitive value automatically assigned to variables that have been declared but not initialized, or to function parameters that haven’t been provided
  • null: A primitive value that explicitly represents the intentional absence of any object value
javascript
let declaredButNotAssigned; // undefined
let intentionalNull = null; // null

Proper Methods for Checking Undefined and Null

Method 1: Double Equals (==) - Most Common

javascript
if (variable == null) {
  // Handles both undefined and null
  // because undefined == null returns true
}

This is the most concise and commonly used method because both undefined and null loosely equal to null.

Method 2: Strict Equality (===) - Explicit Checks

javascript
if (variable === undefined || variable === null) {
  // Explicitly checks for both values
}

This method is more verbose but makes it clear you’re checking for both conditions.

Method 3: Typeof Operator

javascript
if (typeof variable === 'undefined' || variable === null) {
  // First checks if undefined, then null
}

The typeof operator is safe to use even on undeclared variables (unlike direct comparison).

Method 4: Logical OR

javascript
if (!variable) {
  // This also handles undefined, null, false, 0, '', NaN
}

Be careful with this approach as it treats many “falsy” values the same way.

Why Your Current Approach Fails

Your code if(EmpName == 'undefined') fails because:

  1. jQuery’s .attr('class') method returns undefined when the attribute doesn’t exist, not the string 'undefined'
  2. Comparing undefined == 'undefined' returns false because they’re different types
  3. You should compare against the actual undefined value, not the string

Here’s what happens:

javascript
// Your current approach
var EmpName = $("div#esd-names div#name").attr('class'); // Returns undefined
if(EmpName == 'undefined'){ // undefined == 'undefined' → false
  // This block never executes
}

// Correct approach
if(EmpName == null){ // undefined == null → true
  // This block executes
}

The interpreter might be halting due to:

  • An error in another part of your code
  • jQuery throwing an error in certain contexts
  • A syntax error elsewhere

Best Practices for Null Checking

1. Use Double Equals for Nullish Checks

javascript
function processValue(value) {
  if (value == null) {
    console.log('Value is null or undefined');
    return defaultValue;
  }
  return processActualValue(value);
}

2. Provide Default Values

javascript
// Using nullish coalescing operator (ES2020)
const EmpName = $("div#esd-names div#name").attr('class') ?? 'default-class';

// Using logical OR
const EmpName = $("div#esd-names div#name").attr('class') || 'default-class';

3. Validate Before Accessing Properties

javascript
// Safe property access
if (obj && obj.prop) {
  // obj.prop exists
}

// Modern approach with optional chaining
if (obj?.prop) {
  // obj.prop exists if obj is not null/undefined
}

Modern JavaScript Solutions

Optional Chaining (ES2020)

javascript
const EmpName = $("div#esd-names div#name")?.attr('class');
if (EmpName == null) {
  // Handle null/undefined
}

Nullish Coalescing (ES2020)

javascript
const EmpName = $("div#esd-names div#name").attr('class') ?? 'default-value';

Object Null Safety

javascript
const safeAccess = (obj, path) => {
  return path.split('.').reduce((acc, key) => {
    return (acc && acc[key]) !== undefined ? acc[key] : undefined;
  }, obj);
};

// Usage
const value = safeAccess(obj, 'nested.property');

Common Pitfalls and Solutions

Pitfall 1: Comparing Against String ‘undefined’

javascript
// Wrong
if (variable == 'undefined') { /* never works */ }

// Right
if (variable == null) { /* handles both cases */ }

Pitfall 2: Forgetting to Check for Null

javascript
// Wrong - only checks undefined
if (typeof variable === 'undefined') { /* misses null */ }

// Right - checks both
if (variable == null) { /* handles both */ }

Pitfall 3: Using Boolean Conversion

javascript
// Problematic - treats many falsy values the same
if (!variable) { /* also catches 0, false, '', NaN */ }

// Better - only checks for nullish values
if (variable == null) { /* only undefined and null */ }

For your specific case with jQuery, the correct approach would be:

javascript
var EmpName = $("div#esd-names div#name").attr('class');

// Best solution for your case
if (EmpName == null) {
  // Handle the case where class attribute doesn't exist
  console.log('No class attribute found');
  // DO SOMETHING
}

// Or provide a default value
const className = EmpName ?? 'default-class';

This approach will properly handle both undefined (when the attribute doesn’t exist) and null (if jQuery returns null for some reason), preventing your interpreter from halting execution due to unexpected values.