Javascript字符串不是对象吗?

我真的在问,这不是开玩笑的设置。


Douglas Crockford喜欢说在javascript原型面向对象语言中不需要new。


他解释说,new添加这些代码只是为了使来自基于类(即“ 经典 ”)的面向对象的编程语言的人们有所舒适:


JavaScript中,我们很难new雅

JavaScript是一种原型语言,但是它有一个new运算符,试图使它看起来像古典语言。这往往会使程序员感到困惑,从而导致一些有问题的编程模式。


您无需new Object()在JavaScript中使用。请改用对象文字{}。


好的:


new 坏

{} 好

但随后评论员维托·德·阿劳霍(VítorDeAraújo)指出两者并不相同。他举了一个例子,显示a string不像是object:


字符串对象和字符串值不是同一件事:


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不是an发生了object什么?我会将javascript与其他所有语言混为一谈吗?


人到中年有点甜
浏览 221回答 3
3回答

潇潇雨雨

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

函数式编程

我想强调一点,当使用对象方法来获取原始值时,变量仅会临时转换为对象,并且在提出操作之后,该对象会转换回原始值。正如您在字符串对象与文字中所看到的那样,此概念可能会引起混淆-修改原型? 
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript