Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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_Variables - Fatal编程技术网

Javascript 为什么函数变量可以有对象属性而数字变量不能?

Javascript 为什么函数变量可以有对象属性而数字变量不能?,javascript,variables,Javascript,Variables,当我使用变量时,我发现了一件非常神秘的事情 请参阅下面的代码片段 var abc=function(){}; abc.prop=1; 控制台日志(abc); 控制台日志(abc.prop)在JavaScript中,函数是一级对象,因此被视为一级对象。因为在您的第一个代码片段中,您已经将变量abc声明为“function”类型,所以它可以具有属性,就像任何其他js对象一样。在第二个代码段中,您已将其声明为number类型,这不允许您声明属性 见此: 在JavaScript中,函数是一级对象,因此

当我使用变量时,我发现了一件非常神秘的事情

请参阅下面的代码片段

var abc=function(){};
abc.prop=1;
控制台日志(abc);

控制台日志(abc.prop)在JavaScript中,函数是一级对象,因此被视为一级对象。因为在您的第一个代码片段中,您已经将变量abc声明为“function”类型,所以它可以具有属性,就像任何其他js对象一样。在第二个代码段中,您已将其声明为number类型,这不允许您声明属性

见此:

在JavaScript中,函数是一级对象,因此被视为一级对象。因为在您的第一个代码片段中,您已经将变量abc声明为“function”类型,所以它可以具有属性,就像任何其他js对象一样。在第二个代码段中,您已将其声明为number类型,这不允许您声明属性

见此:

根据:

数据类型:

最新的ECMAScript标准定义了七种数据类型:

  • 作为基本体的六种数据类型:
    • 布尔值
    • 空的
    • 未定义
    • 符号(ECMAScript 6中新增)
  • 和对象
原语值不是从
对象继承的,因此不能为其指定属性

原语值将被复制,而不是使用对它们的引用进行传递

如果数字是
Number
的实例,则可以将属性指定给数字:

var abc=新编号(55);//abc通过Number类从Object继承
abc.prop=1;//所以这是有效的
控制台日志(abc);
控制台日志(abc.prop)根据:

数据类型:

最新的ECMAScript标准定义了七种数据类型:

  • 作为基本体的六种数据类型:
    • 布尔值
    • 空的
    • 未定义
    • 符号(ECMAScript 6中新增)
  • 和对象
原语值不是从
对象继承的,因此不能为其指定属性

原语值将被复制,而不是使用对它们的引用进行传递

如果数字是
Number
的实例,则可以将属性指定给数字:

var abc=新编号(55);//abc通过Number类从Object继承
abc.prop=1;//所以这是有效的
控制台日志(abc);
控制台日志(abc.prop)为什么
console.log(abc)只显示函数体,没有
prop
属性? 因为这就是
console.log()
的定义: “如果是函数,只需显示其主体。”

如何获取
函数
对象的属性? 你可以用

  • Object.getOwnPropertyNames(abc)
    所有属性的名称
  • Object.keys(abc)
    可枚举属性的名称
  • Object.values(abc)
    对于可枚举属性的值
  • Object.entries(abc)
    用于可枚举属性的名称和值
与任何其他
对象一样
s.

Why
console.log(abc)只显示函数体,没有
prop
属性? 因为这就是
console.log()
的定义: “如果是函数,只需显示其主体。”

如何获取
函数
对象的属性? 你可以用

  • Object.getOwnPropertyNames(abc)
    所有属性的名称
  • Object.keys(abc)
    可枚举属性的名称
  • Object.values(abc)
    对于可枚举属性的值
  • Object.entries(abc)
    用于可枚举属性的名称和值


像任何其他
对象一样
s.

非常简单…数字没有可枚举的属性函数有属性吗?是的。函数是一个对象。它是一个原始值。那么为什么
console.log(abc)仅显示函数,而不是
prop
属性?如何获取函数对象的属性?非常简单…数字没有可枚举属性函数有属性吗?是的..函数是一个对象。它是一个基本值。那么为什么
console.log(abc)仅显示函数,而不是
prop
属性?如何获取函数对象的属性?只有一个问题,如何获取函数对象的属性?您的意思是希望访问函数中声明的变量吗?或者您希望访问传递给函数的属性?我从@K.得到了答案。请查看问题的注释。只有一个问题,如何获取函数对象的属性?您的意思是希望访问函数中声明的变量吗?或者你想访问传递给函数的属性?我从@K.那里得到了答案。请查看问题的评论谢谢你的帮助帖子,哦,如果你定义abc.prop=1,数字55会消失吗?@EgorT它只是一个控制台。log
。在浏览器控制台中尝试。由于
abc
现在是
Number
的一个实例,因此是
对象的一个实例,所以我们的控制台会感到困惑,并将其记录为一个对象而不是一个数字。非常感谢非常有用的帖子,哦,如果定义abc.prop=1,数字55会消失吗?@EgorT它就是这样的
console.log
。在浏览器控制台中尝试。由于
abc
现在是
Number
的一个实例,因此是
对象的一个实例,所以我们的控制台会感到困惑,并将其记录为一个对象而不是一个数字。这对理解函数有很大帮助object@EgorT请注意,您可以使用
console.dir
而不是
console.log
来列出