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

问题描述 投票:1回答:4

世界上的输出如何不是数字?

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

怎么样?

<script>

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

console.log(x);

</script>
javascript html iife
4个回答
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
投票

foo是争论的焦点。您必须使用函数访问函数内部的属性。符号

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

console.log(x);

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);

1
投票

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

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

console.log(x);
© www.soinside.com 2019 - 2024. All rights reserved.