Хорошо, после редактирования они все еще не эквивалентны, так как test
вызовет toString
.См .:
var myItem = {toString: function() { return 'foo'; }};
['foo', 'bar', 'baz'].indexOf(myItem); // -1
/^(foo|bar|baz)$/.test(myItem); // true
http://jsfiddle.net/hqu7D/
Даже если они являются строковыми значениями (извините, пропустили это), тогда они все еще не эквивалентны, потому что есть дваразличные типы строк и indexOf
использует строгое равенство / идентичность:
http://jsfiddle.net/HpCUY/
Чтобы сделать их действительно эквивалентными, вы можете либо позвонить .toString()
перед использованием indexOf
, либоМожно проверить Object.prototype.toString.call(myItem) === '[object String]'
перед использованием test
.