显然0 in [3,1]
不是确定集合是否包含项目的正确方法。有没有JS兼容的方法可以在不迭代集合的情况下执行此操作?
答案 0 :(得分:2)
您认为
0 in [3,1]
会评估为false。但它评估为真。我认为这是因为null,false和零有时被视为等价。
不,你对what in
does有误解。它测试对象是否具有名称的属性。 Arrays只是具有数字属性的对象:
> console.dir([3,1]);
Array[2]
0: 3
1: 1
length: 2
数组的索引为0
,因此测试为true
。 'length' in [3,1]
也会返回true
。
null,false和zero有时被视为等效
null
,false
和0
都是“假”值,即转换为布尔值时变为false
。这与其他动态类型语言(如PHP或Python)一致。
JavaScript可能会出现令人惊讶的行为,特别是在类型转换方面,但它具有确定性。如果可能,建议简单地避免类型转换。