阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      JS JS in 运算符

      功能

      如果指定的属性在指定的对象或其原型链中,则 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
      

      规范

      SpecificationStatusComment
      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
      StandardInitial definition. Implemented in JavaScript 1.4.
      目录
      目录