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)第一个代码段的code>只显示函数体,没有prop
属性?
因为这就是console.log()
的定义:
“如果是函数,只需显示其主体。”
如何获取函数
对象的属性?
你可以用
Object.getOwnPropertyNames(abc)
所有属性的名称
Object.keys(abc)
可枚举属性的名称
Object.values(abc)
对于可枚举属性的值
Object.entries(abc)
用于可枚举属性的名称和值
与任何其他对象一样
s.Whyconsole.log(abc)第一个代码段的code>只显示函数体,没有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
来列出