The in
operator returns true
if the specified property is in the specified object or its prototype chain.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Syntax
prop in object
Parameters
prop
- A string or symbol representing a property name or array index (non-symbols will be coerced to strings).
object
- Object to check if it (or its prototype chain) contains the property with specified name (
prop
).
Examples
Basic usage
The following examples show some uses of the in
operator.
// Arrays let trees = ['redwood', 'bay', 'cedar', 'oak', 'maple'] 0 in trees // returns true 3 in trees // returns true 6 in trees // returns false 'bay' in trees // returns false (you must specify the index number, not the value at that index) 'length' in trees // returns true (length is an Array property) Symbol.iterator in trees // returns true (arrays are iterable, works only in ES2015+) // Predefined objects 'PI' in Math // returns true // Custom objects let mycar = {make: 'Honda', model: 'Accord', year: 1998} 'make' in mycar // returns true 'model' in mycar // returns true
You must specify an object on the right side of the in
operator. For example, you can specify a string created with the String
constructor, but you cannot specify a string literal.
let color1 = new String('green') 'length' in color1 // returns true let color2 = 'coral' // generates an error (color2 is not a String object) 'length' in color2
Using in
with deleted or undefined properties
If you delete a property with the delete
operator, the in
operator returns false
for that property.
let mycar = {make: 'Honda', model: 'Accord', year: 1998} delete mycar.make 'make' in mycar // returns false let trees = new Array('redwood', 'bay', 'cedar', 'oak', 'maple') delete trees[3] 3 in trees // returns false
If you set a property to undefined
but do not delete it, the in
operator returns true for that property.
let mycar = {make: 'Honda', model: 'Accord', year: 1998} mycar.make = undefined 'make' in mycar // returns true
let trees = new Array('redwood', 'bay', 'cedar', 'oak', 'maple') trees[3] = undefined 3 in trees // returns true
The in
operator will return false
for empty array slots. Even if accessing it directly returns undefined
.
let empties = new Array(3) empties[2] // returns undefined 2 in empties // returns false
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 empties = new Array(3).fill(undefined) 2 in empties // returns true
Inherited properties
The in
operator returns true
for properties in the prototype chain. (If you want to check for only non-inherited properties, use Object.prototype.hasOwnProperty()
instead.)
'toString' in {} // returns true
Specifications
Specification |
ECMAScript (ECMA-262)The definition of 'Relational Operators' in that specification. |
Browser compatibility
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
Update compatibility data on GitHub
Desktop | Mobile | Server | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
in
|
Chrome
Full support 1 |
Edge
Full support 12 |
Firefox
Full support 1 |
IE
Full support 5.5 |
Opera
Full support 4 |
Safari
Full support 1 |
WebView Android
Full support 1 |
Chrome Android
Full support 18 |
Firefox Android
Full support 4 |
Opera Android
Full support 10.1 |
Safari iOS
Full support 1 |
Samsung Internet Android
Full support 1.0 |
nodejs
Full support 0.1.100 |
Legend
- Full support
- Full support
See also
for...in
delete
Object.prototype.hasOwnProperty()
Reflect.has()
- Enumerability and ownership of properties
in operator by Mozilla Contributors is licensed under CC-BY-SA 2.5.