in operator
 The in returns true if the specified property is in the specified object or its prototype chain. 
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
Private fields and methods
You can also use the in operator to check whether a particular private class field or method has been defined in a class. The operator returns true if the method is defined, and false otherwise.
Note: Code will throw if you attempt to access a private class field/method that has not been defined. Using the in operator to check for potentially missing private fields is more compact than using try/catch.
The code fragment below demonstrates a static function that checks whether a specified class has particular private methods and fields.
class ClassWithPrivateFeatures { #a; #b = null; #c() {} get #d() {} static f(o) { return #a in o && #b in o && #c in o && #d in o; } } ClassWithPrivateFeatures.f(new ClassWithPrivateFeatures()) // returns true ClassWithPrivateFeatures.f({}) // returns false
Specifications
Browser compatibility
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | |
| in | 1 | 12 | 1 | 5.5 | 4 | 1 | 1 | 18 | 4 | 10.1 | 1 | 1.0 | 
See also
- for...in
- delete
- Object.prototype.hasOwnProperty()
- Reflect.has()
- Enumerability and ownership of properties
    © 2005–2021 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in