JavaScript之 in 运算符及其应用

2024-09-05 20:24:18

一、定义

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

二、语法

prop in object

参数详解:

  1. prop: 要检查的属性,类型是一个字符串类型或者 symbol 类型的属性名或者数组索引(非 symbol 类型将会强制转为字符串)。

  2. object: 要检查的目标对象,检查它(或其原型链)是否包含指定的属性。

三、示例

1. in 左操作数的类型,是一个字符串类型或者 symbol 类型的属性名或者数组索引(非 symbol 类型将会强制转为字符串)

(1)字符串类型

const obj = {
    name: "xiaoming"
};
"name" in obj; // true

obj对象上存在自身name属性,所以返回的是true。

(2)Symbol类型

示例1:

const obj = {
    name: "xiaoming"
};
Symbol.iterator in obj; // false

obj自身属性及原型链上不包含Symbol.iterator属性,因此下面示例中返回为false。

示例2:

const arr = ["xiaoming", "xiaoli", "xiaohong"];
Symbol.iterator in arr; // true

虽然变量arr的自身属性上没有Symbol.iterator属性,但是它的原型链上(如果想了解原型链,请进入彻底搞懂JavaScript中的原型(__proto__)、原型对象(prototype)及原型链)有这个属性方法(Array.prototype[Symbol.iterator]),所以返回的为true。

(3)数组索引

非Symbol类型会先转为字符串类型

const arr = ["xiaoming", "xiaoli", "xiaohong"];
1 in arr; // true

arr可以作为一个键(数组索引)的对象,如下所示:

const arr = ["xiaoming", "xiaoli", "xiaohong"];
// 相当于
const arr = {
    0: "xiaoming",
    1: "xiaoli",
    2: "xiaohong" 
}
2. in 右操作数必须是一个对象值。

如果in 右操作数不是一个对象时,会报错。

0 in “1”; // 报错:Uncaught TypeError: Cannot use “in” operator to search for “0” in 1

目录

相关推荐
对象属性描述对象-JavaScript浅析 URLSearchParams 使用深入理解JS函数去抖详细介绍JavaScript中的深拷贝、浅拷贝