传递给IIFE时,对象属性(数字)的typeof返回undefined。为什么?

时间:2019-02-27 06:51:05

标签: javascript html iife

输出结果不是数字吗?

  • 有一个传递给对象的简单函数(IIFE),其属性为数字
  • 当我们尝试查找引用数字的属性的typeof时,结果为“未定义”

如何?

<script>

x = (function(foo){
  return typeof(foo.bar);
})({ foo: { bar: 1 } });

console.log(x);

</script>

4 个答案:

答案 0 :(得分:1)

如果应为foo.foo.bar

foo参数是一个对象,其中包含名为foo的属性

x = (function(foo) {
  return typeof(foo.foo.bar);
})({ foo: { bar: 1 } });

console.log(x);

您可能打算像这样破坏参数:

x = (function({ foo }) {
  return typeof(foo.bar);
})({ foo: { bar: 1 } });

console.log(x);

答案 1 :(得分:1)

foo是参数。您必须使用来访问函数内部的属性。符号

x = (function(foo){
  return typeof(foo.foo.bar);
})({ foo: { bar: 1 } });

console.log(x);

答案 2 :(得分:1)

您函数中的foo参数是整个对象(而不是嵌套对象):

{ foo: { bar: 1 } }

因此,当您执行foo.bar时,没有bar属性,因此您得到undefined

因此,typeof undefined将给您"undefined"。相反,您可以使用更清晰的属性名称,以便每个对象的类型都易于理解,然后从您的参数访问foo属性:

x = (function(obj){
  return typeof(obj.foo.bar);
})({ foo: { bar: 1 } });

console.log(x);

答案 3 :(得分:1)

您可以在函数参数中分解foo

let x = (function({foo}){
  return typeof(foo.bar);
})({ foo: { bar: 1 } });

console.log(x);