Javascript字符串不是对象吗?
Douglas Crockford喜欢说在javascript原型面向对象语言中不需要new
。
他解释说,new
添加这些代码只是为了使来自基于类(即“ 经典 ”)的面向对象的编程语言的人们感到某种程度的舒适:
JavaScript中,我们很难new
雅
JavaScript是一种原型语言,但是它有一个new
运算符,试图使它看起来像古典语言。这往往会使程序员感到困惑,从而导致一些有问题的编程模式。
您无需new Object()
在JavaScript中使用。请改用对象文字{}
。
好的:
new
坏{}
好
但后来评论员维托·德·阿劳霍指出,两者并不相同。他举了一个例子,显示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与其他所有语言混为一谈吗?
回答:
“一切都是对象” ……这是围绕该语言存在的重大误解之一。
所有事物 都是对象,我们称之为 原始值 ,即字符串,数字,布尔值,空值和未定义。
没错,字符串是 ,但是您可以访问从其继承的所有方法,String.prototype
就好像它是一个对象一样。
属性访问器运算符(点和括号符号)将字符串值临时转换为String对象,以便能够访问这些方法,例如:
"ab".charAt(1); // "b"
幕后发生的事情是这样的:
new String("ab").charAt(1); // "b", temporal conversion ToObject
与其他原始值(例如Boolean
和)一样Number
,有 对象包装器 ,它们只是包含原始值的对象,如您的示例所示:
var strObj = new String("");strObj.prop = "foo";
typeof strObj; // "object"
typeof strObj.prop; // "string"
当使用原始时:
var strValue = "";strValue.prop = "foo";
typeof strValue; // "string"
typeof strValue.prop; // "undefined"
再次发生是因为上面第二行的属性访问器创建了一个新的时间对象,如下所示:
var strValue = "";new String(strValue).prop = "foo"; // a new object which is discarded
//...
以上是 Javascript字符串不是对象吗? 的全部内容, 来源链接: utcz.com/qa/407234.html