JavaScript:古老的代码使用';新';关键词。为什么?

JavaScript:古老的代码使用';新';关键词。为什么?,javascript,constructor,Javascript,Constructor,我想我对JS开发还是比较陌生的,在对古老的JS代码进行重构的过程中(证明:其中仍然有“with”语句的用法),我遇到了以下几点: var result = new { key: 'value' // etc... } 为什么要使用new关键字?这和下面的有区别吗 var result = { key: 'value' // etc... } 在浪费了大量的时间来研究这个问题并等待着看是否有人知道以前的开发人员在做什么之后,我决定自己回答这个问题 从一个单独的堆

我想我对JS开发还是比较陌生的,在对古老的JS代码进行重构的过程中(证明:其中仍然有“with”语句的用法),我遇到了以下几点:

var result = new {
    key: 'value'
    // etc...
}
为什么要使用
new
关键字?这和下面的有区别吗

var result = {
    key: 'value'
    // etc...
}

在浪费了大量的时间来研究这个问题并等待着看是否有人知道以前的开发人员在做什么之后,我决定自己回答这个问题

从一个单独的堆栈问题来看,这似乎有点相关:

它会创建一个新对象。这个对象的类型就是简单的对象


因此,无论它是在旧浏览器中工作还是在其他任何地方工作,这段代码似乎是一种不连贯的创建新
对象的方式。现代浏览器(Chrome)遇到这种情况时会抛出语法错误,因此如果它曾经有效,现在就不是了。

new
关键字用于导致错误。至少现在是这样。不知道它以前是受支持的。with==古代是如何实现的?(new在这里可能是一个拼写错误)但是你对new的用法有什么疑问呢?曾经有人不理解它并误用它,当你遇到它时,有什么大不了的?你还没有偶然发现一些秘密用法。@dandavis它让行为分析变得非常困难。考虑<代码> < /COD> >引用函数的参数。另外,在“严格”模式下,不允许使用带有的
。@dandavis哈哈。“由于违反了词法范围,使得程序分析(例如,为了安全性)很难不可行。”我的措辞可能有点极端,但有一个“安全性”问题。这是一个类型错误,而不是语法错误。不同之处在于,如果代码包含语法错误,则不会运行任何语法错误,而TypeError仅在包含错误的代码行运行时发生(可能永远不会发生)。