in
操作符
in
操作符判断指定的属性是否包含在指定的对象或其原型链中。
1 | prop in object |
in
操作符作用于对象值,因此,显然不能用于基本数据类型,但不那么明显的是,它也不能用于字符串字面量。
1 | // 以下代码均导致 TypeError |
并且 in
操作符判断的是属性,因此,其左操作数应该是某种合法的属性名类型,这包括:字符串和 Symbol
。有两点需要说明的是:
- 如果左操作数不是
Symbol
类型,将强制转换为字符串(左操作数可为带toString()
函数的对象); - 作用于数组时,左操作数可以是索引。(注意,字符串对象有类似数组的结构)。
1 | let names = ['Eric', 'Zong']; |
indexOf()
方法
字符串与数组上均存在 indexOf()
方法,但严格来说它们都不是判断方法,因此注意,其返回的不是布尔值,而是索引数值。
1 | // 字符串方法 |
应该注意 2 个方法在开始搜索索引参数(
fromIndex
)上的行为差异。注意 ES 支持版本。
includes()
方法
1 | // 字符串方法,ES6+ |
应该注意 2 个方法在开始搜索索引参数上的行为差异。
注意 ES 支持版本。
小结
- 判断对象是否存在某个属性,可用
in
。 - 判断字符串是否包含某个子串,可用
indexOf()
、includes()
。 - 判断数组是否包含某个元素,可用
indexOf
、includes()
。
注意:
indexOf()
和includes()
是严格判等的,因此,如果数组元素为对象,那可能不能得到预期的结果。