JavaScript字符串是一个原始数据类型,不是一个对象。

14 浏览
0 Comments

JavaScript字符串是一个原始数据类型,不是一个对象。

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

Douglas Crockford喜欢说,在JavaScript的原型对象导向语言中,没有必要使用new

他解释说,new只是为了让那些来自基于类(即“经典”)的面向对象编程语言的人们感到舒适:

JavaScript,我们几乎不用new

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

在JavaScript中,你永远不需要使用new Object(),而是使用对象字面量{}

好吧,没问题:

  • new不好
  • {}

但是评论者Vítor De Araújo指出,这两者并不相同。他举例说明了string不同于object

字符串对象和字符串值并不相同:

js> p = "Foo"
Foo
js> p.weight = 42
42
js> p.weight // 返回undefined
js> q = new String("Foo")
Foo
js> q.weight = 42
42
js> q.weight
42

字符串值不能拥有新的属性。其他类型也是如此。

这里发生了什么,string不是一个object吗?我是不是把JavaScript和其他一些一切都是对象的语言搞混了?

0