ОБНОВЛЕНО ИЗ ОРИГИНАЛЬНОГО ВОПРОСА
Я пытаюсь узнать, как «выглядит» объект javascript, просматривая его свойства следующим образом:
//create object without prototype
var obj = Object.create(null);
//add properties
obj.a = 3;
obj.b = 76.3;
obj.c = { a : 23 , b : true , c : 1};
obj.s = "ABC!";
//output string
var outStr = new String();
for(var prop in obj)
{
outStr += "Property " + prop + " is a " + typeof(obj[prop]) + " with value " + obj[prop] + "\n";
for(var prop1 in obj[prop])
{
outStr += "Property " + prop1 + " is a " + typeof(obj[prop][prop1]) + " with value " + obj[prop][prop1] + "\n";
for(var prop2 in obj[prop][prop1])
{
outStr += "Property " + prop2 + " is a " + typeof(obj[prop][prop1][prop2]) + " with value " + obj[prop][prop1][prop2] + "\n";
for(var prop3 in obj[prop][prop1][prop2])
{
outStr += "Property " + prop3 + " is a " + typeof(obj[prop][prop1][prop2][prop3]) + " with value " + obj[prop][prop1][prop2][prop3] + "\n";
for(var prop4 in obj[prop][prop1][prop2][prop3])
{
outStr += "Property " + prop4 + " is a " + typeof(obj[prop][prop1][prop2][prop3][prop4]) + " with value " + obj[prop][prop1][prop2][prop3][prop4] + "\n";
}
}
}
}
}
alert(outStr);
output:
Property a is a number with value 3
Property b is a number with value 76.3
Property c is a object with value [object Object]
Property a is a number with value 23
Property b is a boolean with value true
Property c is a number with value 1
Property s is a string with value ABC!
Property 0 is a string with value A
Property 0 is a string with value A
Property 0 is a string with value A
Property 0 is a string with value A
Property 1 is a string with value B
Property 0 is a string with value B
Property 0 is a string with value B
Property 0 is a string with value B
Property 2 is a string with value C
Property 0 is a string with value C
Property 0 is a string with value C
Property 0 is a string with value C
Property 3 is a string with value !
Property 0 is a string with value !
Property 0 is a string with value !
Property 0 is a string with value !
Теперь это ведет себя точно так, как я ожидаю для каждого свойства, кроме свойства String obj.s = "ABC!";
Я понимаю, что obj.s содержит свойства (ключи и значения):
"0" = "A"
"1" = "B"
"2" = "C"
"3" = "!"
И из предыдущего ответа (большое спасибо @pimvdb и @deestan) я понимаю, что каждыйзначения этих свойств являются строками, каждая из которых также содержит ключ свойства «0», который сам должен также содержать ключ свойства «0» и т. д., и т. д.?вот почему я получаю дополнительные строки, записанные для свойства string.
Поэтому мой вопрос теперь звучит так:
Должен ли тип значения всех свойств в какой-то момент в конечном итоге вернуться к примитивувведите число или логическое значение, чтобы остановить эту рекурсивную цепочку?Я думаю о памяти, которая на самом деле содержит этот объект, и когда я начал писать этот небольшой тестовый скрипт, чтобы «посмотреть» на объект, я в основном хотел увидеть все примитивы и то, как объект хранит их, но на самом деле не может бытьбесконечное распределение строки в строку в строку ... Я представляю, что он просто хранится как строковый объект с его 4 символами (или 5, если есть и конец символа строки \ 0)