Я отвечаю на это, потому что есть много дезинформации в теме:
Это Строка или объект?
Нет"cat"
является значением примитивной Строки:
typeof "cat"; // "string", a String value
"cat" instanceof String; // false
typeof new String("cat"); // "object", a String object
new String("cat") instanceof String; // true
я буду говорить позже о типах и примитивных значениях.
Наследует ли все свойства/методы от String или String.prototype?
Ну, когда вы используете property accessor operator (точку или кронштейн обозначения), то примитивное значение неявно преобразуется в объект, внутренне, поэтому все методы на String.prototype
доступны, например:
Когда доступ:
"cat".chatAt(0);
за кулисами "cat"
преобразуется в объект:
Object("cat").chatAt(0);
Вот почему у вас есть доступ ко всем унаследованным свойствам значений.
Почему существует String и String.prototype?
String
является функцией конструкторы, позволяет создавать Струнные объекты или сделать преобразование типа:
var stringObj = new String("foo"); // String object
// Type conversion
var myObj = { toString: function() { return "foo!"; } };
alert(String(myObj)); // "foo!"
String.prototype
В объекте является объектом, где экземпляры объектов Струнных наследуют от.
Я знаю, что это сбивает с толку, мы имеем значения String и String, но большую часть времени вы на самом деле работаете только со строковыми значениями, не волнуйтесь сейчас о объектах String.
Должен ли я назвать String объектом String и String.prototype прототипом String?
Вы должны позвонить по телефону String
"The String
constructor".
«Строковый прототип» в порядке.
Вы должны знать, что «Все есть NOT объект».
Давайте поговорим о типов, Есть пять language types указано:
- Строка
- Номер
- Boolean
- Null
- Неопределенное
A primitive value - это «данность, которая представлена непосредственно на самом низком уровне реализации языка», простейшая часть информации, которую вы можете получить.
Значения описанных выше типов могут быть:
- Нуль: Значение
null
.
- Undefined: Значение
undefined
.
- Номер: Все номера, такие как
0
, 3.1416
, 1000
и т. Д. Также NaN
и Infinity
.
- Boolean: Значения
true
и false
.
- Строка: Каждая строка, такая как
"cat"
и "bar"
.
Я согласен с вами с «строкой» и новой разницей String(), я признаю, что я этого не знал. Но я не согласен с частью данных и объектов.Возможно, строки, булевы и числа - это не объекты, но они представлены как объекты в JS, и если вы делаете что-то вроде String instanceof Object, результат будет истинным. – mck89
@ mck89, я имел в виду, что примитивное значение - это самая простая часть данных, которую вы можете иметь, да, вы можете «обрабатывать их как объекты» (например, доступ к унаследованным свойствам, «foo» .chatAt' или '5 .. toFixed'), но они по-прежнему таковы, что значения, а не объекты. О 'String instanceof Object' очевидна, потому что' String' является * объектом Function *, который наследуется от 'Function.prototype', который наследуется от' Object.prototype', поэтому 'String instanceof Function 'даст вам также' true '. – CMS