代码之家  ›  专栏  ›  技术社区  ›  Deadpool

传递到IIFE时对象属性(数字)的typeof返回未定义。为什么?

  •  0
  • Deadpool  · 技术社区  · 7 年前

    • 有一个简单的函数(IIFE)正在传递一个对象,其属性是一个数字
    • 当我们试图找到引用数字的属性的类型时,结果是“未定义”

    怎么用?

    <script>
    
    x = (function(foo){
      return typeof(foo.bar);
    })({ foo: { bar: 1 } });
    
    console.log(x);
    
    </script>
    4 回复  |  直到 7 年前
        1
  •  1
  •   adiga    7 年前

    如果应该 foo.foo.bar

    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
  •  1
  •   ellipsis    7 年前

    foo是争论的焦点。必须使用访问函数内部的属性。表示法

    x = (function(foo){
      return typeof(foo.foo.bar);
    })({ foo: { bar: 1 } });
    
    console.log(x);
        3
  •  1
  •   Nick Parsons Felix Kling    7 年前

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

    { foo: { bar: 1 } }
    

    所以,当你这样做的时候 foo.bar 没有 bar undefined .

    因此, typeof undefined "undefined" . 相反,您可以使用更清晰的属性名称,以便易于理解每个对象的类型,然后访问 你论点的性质:

    x = (function(obj){
      return typeof(obj.foo.bar);
    })({ foo: { bar: 1 } });
    
    console.log(x);
        4
  •  1
  •   Hassan Imam Ravi kant    7 年前

    你可以解构 foo 在函数参数中。

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