nodejs中函数和字典中的奇怪行为

时间:2018-01-26 06:15:38

标签: javascript node.js dictionary

我是node.js的初学者,我正在尝试以下代码。

abc = function add( x, y) {
    return x + y
}
abc.A = "I am a string"
abc.B = 29
console.log( "abc is \n", abc, "\n and typeof ABC is ", typeof abc)
console.log( "abc.A is '"+ abc['A'] + "' and abc.B is", abc['B'] )

此代码的输出是

abc is 
 function add( x, y) {
        return x + y
    } 
 and typeof ABC is function
abc.A is 'I am a string' and abc.B is 29

但是,如果我在开头将abc定义为数字

abc = 459   
abc.A = "I am a string"
console.log( abc['A'] )

然后输出

undefined

有人可以解释为什么第一个代码工作正常,但第二个代码没有?

2 个答案:

答案 0 :(得分:2)

JS中的所有东西都是数据类型,哦是的JS有数据类型,与流行的看法相反,其中一种数据类型是函数,它是一种对象,JS中的对象可以动态创建和修改,允许你除非另有说明,否则添加,重命名和删除属性。这就是为什么你可以动态添加属性,你甚至可以在运行时重新分配原型。这就是为什么你可以做到这一点并且没有得到错误以及为什么你可以使用一些其他属性,如长度或名称,bc函数只是另一个对象。函数的toString方法恰好打印实现。

根据您的q的第2部分,您无法为文字值指定新属性,但您可以执行var a = new Number(100)然后执行a.prop='whatever'并仍然可以访问。

答案 1 :(得分:0)

在JavaScript中,函数是对象,因此您可以向它们添加属性,就像您创建了:

{{1}}

数字,字符串,布尔值是原语,不能添加属性。这就是为什么你不能将属性分配给数字。