首页
学习
活动
专区
工具
TVP
发布

JS中最容易忽视的运算符in

进入正题之前我们先来看下这个问题:

4 in [2,4,6] 返回值是Boolean类型,true还是false?

按照“常理”大多数人会想肯定返回true啊(问了我们team的各位大佬都说是true),但是结果却是:

为什么呢?

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

语法

prop in object参数

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

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

右操作数必须是一个对象值。如果这里的object是数组的话,我们可以将数组“看作”object,数组的索引就是key,数组中每一个元素就是每个key对应的value值,‘4’ 表示的是数组中的索引,[2,4,6]的长度是3,最大索引是2,所以返回false。

你可以指定使用构造函数创建的字符串,但不能指定字符串文字。

如果你使用运算符删除了一个属性,则运算符对所删除属性返回。

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

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

除了数组情况下可借用in 操作符外,我们还可以利用in 的特性来简化if 语句在多个“或”条件情况时的写法。

例如,下面一句:

if ( foo == 'bar' foo == 'foobar' foo == 'foo' )

{

//...

}

就可以写成:

if ( foo in { 'bar':'', 'foobar':'', 'foo':'' } )

{

//...

}

判断结果相同。

优势

a、我们就可以非常方便的利用in 来判断元素是否在对象中;

b、对象中检索属性,例如:o['oak'],其时间复杂度为O(1),而要在数组中找一个元素,时间复杂度为O(n)。

不过,也不说所有的数组都可以用对象来代替的。至少,必须要求数组中元素是唯一的。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180108G10FAG00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券