2015-06-22 2 views
-1

Я очень смущен о том, что wrapper objects for primitives. Например, примитив строки и строка, созданная с объектом обертки строки.Разница между строковым примитивом и объектом оболочки строки в Javascript

var a = "aaaa"; 
var b = new String("bbbb"); 
console.log(a.toUpperCase()); // AAAA 
console.log(b.toUpperCase()); // BBBB 
console.log(typeof a);  // string 
console.log(typeof b);  // object 

Оба дают доступ к String.prototype методам, и, кажется, действуют точно так же, как строковый литерал. Но это не строка, это объект. Какова практическая разница между a и b? Почему я должен создать строку, используя new String()?

+2

Там нет реального Прецедент на самом деле. Практическое различие заключается в том, что строковая оболочка действует как объект (и, например, может иметь собственные свойства). – Bergi

ответ

2

Простейшая строка не является объектом. Объектная строка - это объект.

В принципе, это означает, что: струны

  • объекта сравниваются по ссылке, а не по строке они содержат

    "aaa" === "aaa";       // true 
    new String("aaa") === new String("aaa"); // false 
    
  • строки Объект может хранить свойства.

    function addProperty(o) { 
        o.foo = 'bar'; // Set a property 
        return o.foo; // Retrieve the value 
    } 
    addProperty("aaa");    // undefined 
    addProperty(new String("aaa")); // "bar" 
    
Смежные вопросы