3

Помогите пожалуйста понять что детально происходит при таком вызове:

  String.prototype.camelCase=function(){
     return [typeof this, this];
    }
console.log("camel case word".camelCase());</code></pre>

Непонятно в первую очередь почему возвращается тип объект, а не строка.

Я понимаю, что вызов camelCase() происходит в контексте "camel case word". То есть this будет указывать на эту строку. НО именно на строку, а возвращается почему-то, объект.

объект

Grundy
  • 81,538
cyklop77
  • 1,791
  • Потому что String это объект и константаная строка приводтся к объекту String автоматом. – ErroR Nov 01 '17 at 11:27
  • 1
    Можно указать "use strict"; но лучше return [typeof this, String(this)]; – Максим Nov 01 '17 at 11:36

1 Answers1

6

Так как данная функция не в strict моде, this внутри нее является объектом класса String, а не литералом строки. Поэтому тип соответствующий.

Если добавить директиву "use strict", то будет ожидаемый тобой результат

String.prototype.strictCamelCase = function() {
  "use strict";
  return [typeof this, this];
}

console.log("camel case word".strictCamelCase());

Grundy
  • 81,538