【问题标题】:typeof of an object property (number) on passing to IIFE is returning undefined. Why?传递给 IIFE 的对象属性(数字)的 typeof 返回未定义。为什么?
【发布时间】:2019-02-27 06:51:04
【问题描述】:

世界上怎么输出不是数字?

  • 有一个简单函数 (IIFE) 正在传递一个对象,该对象的属性是一个数字
  • 当我们试图查找引用数字的那个属性的 typeof 时,结果是 'undefined'

怎么样?

<script>

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

console.log(x);

</script>

【问题讨论】:

  • 你把名字弄混了。 foo 是对象名称,但该对象也有一个名为foo属性(这是一个嵌套对象,其中包含一个名为bar 的属性)

标签: javascript html iife


【解决方案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);

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      您的函数中的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);

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-10
          • 1970-01-01
          • 2020-01-05
          • 2020-04-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多