声明这样的数组之间的真正区别是什么:
var myArray = new Array();
Run Code Online (Sandbox Code Playgroud)
和
var myArray = [];
Run Code Online (Sandbox Code Playgroud) 在另一个问题中,用户指出该new关键字使用起来很危险,并提出了一种不使用的对象创建解决方案new.我不相信这是真的,主要是因为我使用了Prototype,Scriptaculous和其他优秀的JavaScript库,并且每个人都使用了new关键字.
尽管如此,昨天我在YUI剧院观看道格拉斯·克罗克福德的演讲,他说的完全一样,他new在代码中不再使用关键字(Crockford on JavaScript - Act III:Function the Ultimate - 50:23分钟).
使用new关键字"不好" 吗?使用它有哪些优缺点?
这不是一个笑话的设置,我真的在问.
Douglas Crockford喜欢说在javascript原型面向对象语言中没有必要new.
他解释说,这new只是为了让人们从基于类(即" 经典 ")的面向对象编程语言中获得某种程度的安慰:
JavaScript,我们很难
new雅JavaScript是一种原型语言,但它有一个
new运算符,试图使它看起来有点像经典语言.这往往会使程序员感到困惑,从而导致一些有问题的编程模式.您永远不需要
new Object()在JavaScript中使用.请改用对象文字{}.
好的:
new 坏 {} 好但是后来评论者VítorDeAraújo指出这两者并不相同.他给出了一个例子,表明a string不像object:
字符串对象和字符串值不是同一个东西:
Run Code Online (Sandbox Code Playgroud)js> p = "Foo" Foo js> p.weight = 42 42 js> p.weight // Returns undefined js> q = new String("Foo") Foo js> q.weight = 42 42 js> q.weight 42字符串值不能具有新属性.同样的事情对其他类型也有效.
这里发生了什么string不是一个object?我是否混淆了javascript与其他一些语言,其中一切都是对象?
从 Mozilla 文档中,我通过以下链接了解了 new 运算符: https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new
function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
const car1 = new Car('Eagle', 'Talon TSi', 1993);
console.log(car1.make);
// expected output: "Eagle"
Run Code Online (Sandbox Code Playgroud)
但我也可以在不使用“this”和“new”运算符的情况下执行此操作:
var Car = (make, model, year) => ({make, model, year})
var car1 = Car('Eagle', 'Talon TSi', 1993)
console.log(car1.make)
Run Code Online (Sandbox Code Playgroud)
如果我可以在不使用“this”和“new”运算符的情况下实现相同的结果,那么首先使用它们的意义何在?或者我错过了什么重要的事情?谢谢。我对菜鸟问题感到抱歉。