代码之家  ›  专栏  ›  技术社区  ›  Ian Boyd

javascript字符串如何不是对象?

  •  33
  • Ian Boyd  · 技术社区  · 14 年前

    Douglas Crockford is fond of saying 在JavaScript原型面向对象语言中,不需要 new .

    他解释说 新的 只是为了给来自阶级的人(即 古典的 “)面向对象编程语言某种程度上的舒适性:

    JavaScript, We Hardly new Ya

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

    你不需要使用 new Object() 在JavaScript中。使用对象文本 {} 相反。

    好吧,好的:

    • 新的 坏的
    • {} 好的

    但是后来评论者 Vítor De Araújo pointed out that the two are not the same . 他举了一个例子表明 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
    

    字符串值不能有新属性。同样的事情也适用于其他类型。

    这是怎么回事? 一串 不是一个 对象 ?我是否将javascript与其他一些语言混淆了,它们都是对象?

    1 回复  |  直到 14 年前
        1
  •  66
  •   Christian C. Salvadó    14 年前

    String.prototype

    accessor operators

    "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
    //...