当我使用变量时,我发现了非常神秘的东西。
请参阅下面的摘录。
var abc = function(){};
abc.prop = 1;
console.log(abc);
console.log(abc.prop);

var abc = 3;
abc.prop = 1;
console.log(abc);
console.log(abc.prop);

答案 0 :(得分:2)
console.log(abc);
只显示函数体,而没有prop
属性?因为console.log()
被定义为:
"如果它是一个功能,只需显示它的正文。"
Function
对象的属性?您可以使用
Object.getOwnPropertyNames(abc)
所有属性'名称,Object.keys(abc)
代表可枚举的属性'名称,Object.values(abc)
代表可枚举的属性'值,Object.entries(abc)
用于可枚举的属性'名称和价值观。与任何其他Object
一样。
答案 1 :(得分:1)
在JavaScript中,函数是第一类对象,因此被视为对象。因为在您的第一个片段中,您已声明变量abc为' function',它可以具有属性,就像任何其他js对象一样。在第二个片段中,您已将其声明为类型编号,这不允许您声明属性。
看到这个: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions
答案 2 :(得分:1)
根据MDN:
数据类型:
最新的ECMAScript标准定义了七种数据类型:
- 六种原始数据类型:
- 布尔
- 空
- 未定义
- 数
- 字符串
- 符号(ECMAScript 6中的新内容)
- 和对象
原始值不会从Object
继承,因此您无法为其分配属性。
复制原始值,而不是使用对它们的引用传递。
如果数字是Number
的实例:
var abc = new Number(55); // abc inherits from Object via the Number class
abc.prop = 1; // so this is valid
console.log(abc);
console.log(abc.prop);
注意: abc
的控制台日志错误,因为SO console.log
将abc
记录为一个对象,应将其记录为数字。请改用浏览器控制台。 (abc
确实是一个对象,因为它通过类Object
从Number
继承,但它应该记录为数字,因为它是Number
的实例。 / p>