我真的在问,这不是开玩笑的设置。Douglas Crockford喜欢说在javascript原型面向对象语言中不需要new。他解释说,new添加这些代码只是为了使来自基于类(即“ 经典 ”)的面向对象的编程语言的人们有所舒适:JavaScript中,我们很难new雅JavaScript是一种原型语言,但是它有一个new运算符,试图使它看起来像古典语言。这往往会使程序员感到困惑,从而导致一些有问题的编程模式。您无需new Object()在JavaScript中使用。请改用对象文字{}。好的:new 坏{} 好但随后评论员维托·德·阿劳霍(VítorDeAraújo)指出两者并不相同。他举了一个例子,显示a string不像是object:字符串对象和字符串值不是同一件事:js> p = "Foo"Foojs> p.weight = 4242js> p.weight // Returns undefinedjs> q = new String("Foo")Foojs> q.weight = 4242js> q.weight42字符串值不能具有新属性。同样的事情对于其他类型也有效。这里string不是an发生了object什么?我会将javascript与其他所有语言混为一谈吗?
3 回答

潇潇雨雨
TA贡献1833条经验 获得超4个赞
字符串和对象之间最重要的区别是,对象必须遵循以下规则进行==操作:
仅当操作数引用相同的对象时,比较对象的表达式才为true。
因此,尽管字符串具有==比较值的便利,但是在使任何其他不可变对象类型表现得像值类型时,您还是很不走运。(也可能存在其他差异,但这是每天引起JavaScript开发人员兴奋的唯一差异)。例子:
"hello" == "hello"
-> true
new String("hello") == new String("hello") // beware!
-> false

函数式编程
TA贡献1807条经验 获得超9个赞
我想强调一点,当使用对象方法来获取原始值时,变量仅会临时转换为对象,并且在提出操作之后,该对象会转换回原始值。正如您在字符串对象与文字中所看到的那样,此概念可能会引起混淆-修改原型?
添加回答
举报
0/150
提交
取消