DEV Community

Cover image for JavaScript In Operator

Posted on


JavaScript In Operator

The Question

I recently saw a quiz question asking "what is the output of ..."

3 in [1, 2, 3]
Enter fullscreen mode Exit fullscreen mode

I got it right, but wanted to dig further into what the in operator does and can do.


On the MDN web docs, there is some good information.

At it's core, this operator looks pretty simple. But, as the quiz above shows, it's not super intuitive.

The Syntax

The in operator is an built-in operator in JavaScript which is used to check whether a particular property exists in an object or not. It returns boolean value true if the specified property is in an object, otherwise it returns false.

prop in object

The Parameters


A string or symbol representing a property name or array index (non-symbols will be coerced to strings).


Object to check if it (or its prototype chain) contains the property with specified name (prop).

Basic Use-Cases

// Arrays
let people = ['bob', 'jen', 'patrick', 'anne', 'tim'];
const person1 = 0 in people;        // true
const person2 = 3 in people;        // true
const person3 = 6 in people;        // false
const person4 = 'tom' in people;    // false
// (the index number must be specified, not the value at that index)
const person5 = 'length' in people; // true
// (length is a property of an Array)
const person6 = Symbol.iterator in people;
// true (arrays are iterable, works only in ES2015+)

// Predefined Objects
const hasPI = 'PI' in Math;         // true

// Custom objects
let car = { make: 'Ram', model: '1500', year: 2015 };
const hasMake = 'make' in car;      // true
const hasModel = 'model' in car;    // true
Enter fullscreen mode Exit fullscreen mode

An Object must specified on the right side of the in operator. A string created with the String constructor can be used, but a string literal cannot.

let color1 = new String('green');
const hasLength1 = 'length' in color1;
// true

let color2 = 'red';
const hasLength2 = 'length' in color2;
// generates an error (color2 is not a String object)
Enter fullscreen mode Exit fullscreen mode

Deleted and Undefined

If a property is deleted with the delete operator, the in operator returns false for that property.

If a property is set to undefined but not deleted, the in operator returns true for that property.

The in operator will return false for empty array slots. Even if accessing it directly returns undefined.

To avoid this, make sure a new array is always filled with non-empty values or not write to indexes past the end of array.

let empty = new Array(3).fill(undefined)
const isEmpty = 2 in empty
// true
Enter fullscreen mode Exit fullscreen mode

Inherited properties

The in operator returns true for properties in the prototype chain. (To check for only non-inherited properties, use Object.prototype.hasOwnProperty() instead.)

const hasToString = 'toString' in {}
// true
Enter fullscreen mode Exit fullscreen mode

Top comments (0)

The JavaScript Brief

1. Top 5 MERN STACK projects to improve your practical understanding

Boost your MERN Stack development skills by undertaking interesting beginner projects. These five engaging projects cover web applications and range from social media website applications to geo-social networking maps. Hone your understanding and apply modern techniques backed up by hands-on experience.

2. How To Optimize Your React App’s Performance

Learn the best optimizing techniques to make your React applications faster and more efficient. Focusing on the identification of performance bottlenecks and common pitfalls to avoid, these optimization strategies will keep your applications running smoothly even when faced with growing complexity.

3. A story of let, const, object mutation, and a bug in my code

In the pursuit of bug-free code, explore an incident involving a mix-up between const and let, making sure your custom code works effectively with third

party documentation. Discover best practices on program flow and learn about JavaScript's unpredictable aspects to ensure your core code is robust.