在Node.js中重新定义特殊词(技术上预定义的全局变量)如Object
有多糟糕?我有一个mongoose
模型,我想称之为“对象”,因为它代表了一个对象,mongoose
的约定似乎是模型是大写的。但是,我注意到Object
是JavaScript中的关键字。我尝试使用Node本身来查看Object
关键字的确切内容,具体取决于JavaScript源代码所说的内容。但是,当我在Node shell中运行console.log(Object.toString());
时,它会返回function Object() { [native code] };
。其他特殊单词(如Boolean
和String
)在记录时会产生类似的输出。我会进入Node源代码,但遗憾的是我没有学习C或C ++的特权。
因此,重新定义JavaScript关键字(例如Object
,Array
或Number
?的后果会产生什么影响?我主要在Node的上下文中询问。 js,但有关JavaScript的信息肯定会有所帮助。我可能不会像原来那样使用这些变量,我认为它们是每种类型的包装对象(数组为Array
,数字为Number
等),但是有没有将它们用于完全不同目的的其他意外后果是什么?
答案 0 :(得分:1)
不要这样做。事情会如何爆炸的简单例子:
@jack:~$ node
> Object = ''
''
> var c = {}
undefined
> c
util.js:222
var keys = Object.keys(value);
^
TypeError: Object has no method 'keys'
at formatValue (util.js:222:21)
at Object.inspect (util.js:140:10)
at REPLServer.self.writer (repl.js:177:19)
at finish (repl.js:291:38)
at repl.js:251:15
at REPLServer.self.eval (repl.js:122:7)
at Interface.<anonymous> (repl.js:239:12)
at Interface.EventEmitter.emit (events.js:95:17)
at Interface._onLine (readline.js:202:10)
at Interface._line (readline.js:531:8)
如果你在脚本中执行此操作,也会发生同样的事情。您应该为这些对象的版本添加前缀(或名称空间)。