如果指定的属性在指定的对象或其原型链中，则`in` 运算符返回`true`。

## 语法

    prop in object

### 参数

`prop`
  一个字符串类型或者 symbol 类型的属性名或者数组索引（非symbol类型将会强制转为字符串）。

`objectName`
  检查它（或其原型链）是否包含具有指定名称的属性的对象。

## 描述

下面的例子演示了一些 `in` 运算符的用法。

    // 数组
    var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
    0 in trees        // 返回true
    3 in trees        // 返回true
    6 in trees        // 返回false
    "bay" in trees    // 返回false (必须使用索引号,而不是数组元素的值)

    "length" in trees // 返回true (length是一个数组属性)

    Symbol.iterator in trees // 返回true (数组可迭代，只在ES2015+上有效)

    // 内置对象
    "PI" in Math          // 返回true

    // 自定义对象
    var mycar = {make: "Honda", model: "Accord", year: 1998};
    "make" in mycar  // 返回true
    "model" in mycar // 返回true

`in`右操作数必须是一个对象值。例如，你可以指定使用`String`构造函数创建的字符串，但不能指定字符串文字。

    var color1 = new String("green");
    "length" in color1 // 返回true
    var color2 = "coral";
    "length" in color2 // 报错(color2不是对象)

### 对被删除或值为 undefined 的属性使用`in`

如果你使用 `delete` 运算符删除了一个属性，则 `in` 运算符对所删除属性返回 `false`。

    var mycar = {make: "Honda", model: "Accord", year: 1998};
    delete mycar.make;
    "make" in mycar;  // 返回false

    var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
    delete trees[3];
    3 in trees; // 返回false

如果你只是将一个属性的值赋值为`undefined`，而没有删除它，则 `in` 运算仍然会返回`true`。

    var mycar = {make: "Honda", model: "Accord", year: 1998};
    mycar.make = undefined;
    "make" in mycar;  // 返回true

    var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
    trees[3] = undefined;
    3 in trees; // 返回true

### 继承属性

如果一个属性是从原型链上继承来的，`in` 运算符也会返回 `true`。

    "toString" in {}; // 返回true

## 规范

Specification | Status | Comment
--- | --- | ---
ECMAScript Latest Draft (ECMA-262) Relational Operators | Draft |
ECMAScript 2015 (6th Edition, ECMA-262) Relational Operators | Standard |
ECMAScript 5.1 (ECMA-262) The in Operator | Standard |
ECMAScript 3rd Edition (ECMA-262) The in Operator | Standard | Initial definition. Implemented in JavaScript 1.4.

## 浏览器兼容

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
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | Android webview | Chrome for Android | Edge Mobile | Firefox for Android | Opera for Android | Safari on iOS | Samsung Internet | Node.js
`in` | Chrome Full support Yes | Edge Full support Yes | Firefox Full support 1 | IE Full support Yes | Opera Full support Yes | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Edge Mobile Full support Yes | Firefox Android Full support 4 | Opera Android Full support Yes | Safari iOS Full support Yes | Samsung Internet Android Full support Yes | nodejs Full support Yes

### Legend

Full support
  Full support

## 相关链接

- `for...in`
- `delete`
- `Object.prototype.hasOwnProperty()`
- `Reflect.has()`
- 属性的可枚举性和所有权