JavaScript之 in 运算符及其应用
2024-09-05 20:24:18一、定义
如果指定的属性在指定的对象或其原型链中,则 in 运算符返回 true。
二、语法
prop in object
参数详解:
prop: 要检查的属性,类型是一个字符串类型或者 symbol 类型的属性名或者数组索引(非 symbol 类型将会强制转为字符串)。
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