不是它检测属性是否存在的能力,因此在早期的代码中,很多可喜欢用“if (!obj.propName) {}” 这样的方式来检测propName是否是有效的属性。——很多时候,检测有效性比检测“是否存有该属性”更有实用性。因此这种情况下,in只是一个可选的、官方的方案。 in关键字的重要应用是高速字符串检索。尤其是在只需要判定“字符串是否存在”的情况下。例如10万个字符串,如果存储在数组中,那么检索效率将会极差。//---------------------------------------------------------// 使用对象来检索//---------------------------------------------------------function arrayToObject(arr) { for (var obj=new Object(), i=0, imax=arr.length; i<imax; i++) { obj[arr[i]]=null; } return obj;} var arr = ['abc', 'def', 'ghi']; // more and more... obj = arrayToObject(arr); function valueInArray(v) { for (var i=0, imax=arr.length; i<imax; i++) { if (arr[i]==v) return true; } return false;} function valueInObject(v) { return v in obj;} 这种使用关键字in的方法,也存在一些限制。例如只能查找字符串,而数组元素可以是任意值。另外,arrayToObject()也存在一些开销,这使得它不适合于频繁变动的查找集。最后,(我想你可能已经注意到了)使用对象来查找的时候并不能准确定位到查找数据,而数组中可以指向结果的下标。

评论