Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查是否为';迭代JavaScript变量是安全的_Javascript - Fatal编程技术网

检查是否为';迭代JavaScript变量是安全的

检查是否为';迭代JavaScript变量是安全的,javascript,Javascript,我有一个JavaScript函数,其中有人可以传入任何内容,我使用 for x in obj 语法。但是,如果传递原语(字符串或数字),则会导致错误;正确的行为是函数对那些对象的作用方式与对没有键的对象的作用方式相同 我可以做一个try..catchblock来解决这个问题,但是还有其他(更简洁的)方法吗 对象和数组也是如此(尽管您通常不希望使用for..in在数组上迭代) 编辑:修复,每厘米。有很多方法可以推断,这里有一个很好的方法: function isIterable(obj) {

我有一个JavaScript函数,其中有人可以传入任何内容,我使用

for x in obj
语法。但是,如果传递原语(字符串或数字),则会导致错误;正确的行为是函数对那些对象的作用方式与对没有键的对象的作用方式相同

我可以做一个
try..catch
block来解决这个问题,但是还有其他(更简洁的)方法吗

对象和数组也是如此(尽管您通常不希望使用for..in在数组上迭代)


编辑:修复,每厘米。

有很多方法可以推断,这里有一个很好的方法:

function isIterable(obj) {
  if (obj && obj.hasOwnProperty) {
    return true;
  }
  return false;
}

你可以选择一些。很好的测试,我唯一可以添加的是,
typeof
是一个一元运算符,而不是一个函数,所以paren只是在
x
周围创建一个表达式,然后应用该运算符。另外,虽然我很迂腐和愚蠢,因为
typeof
总是返回一个字符串,
=
操作符可能会快一秒。总而言之,这是完全正确的…唯一的问题可能是
null
,是一个原始的
typeof
是完全错误的:
typeof null=='object'
Alex:为什么
===
=
更快?根据ECMAScript规范,在这种情况下,两种比较将执行完全相同的步骤。啊,非常优雅。我没有意识到
typeof
为数组等返回了
object
。谢谢@蒂姆:实际上我并不完全确定,在这种情况下,为什么三重相等需要更长的时间。我知道,一般来说,三重等于有时会更快,因为二重等于经常需要进行类型强制。不过,我所拥有的只是基准,我不能说我在这些方面是最好的,但它们是相当一致的。(如果你想要的数字在chrome中不是太接近/太小,那么你必须在迭代变量的末尾加上一个0)-double equals似乎每次都赢(即使你切换顺序)。希望有帮助:)
function isIterable(obj) {
  if (obj && obj.hasOwnProperty) {
    return true;
  }
  return false;
}