Удаление объектов в JavaScript

Вы должны создать рекурсивную функцию, это означает, что сам вызов функции выполняется до тех пор, пока не будет выполнено условие, а затем он возвращает результат и проходит через стек ранее вызванной функции для определения конечных результатов. Вот так

<?php
// associative array containing array, string and object
$array = ['hello' => 1, 'world' => [1,2,3], '!' => ['hello', 'world'], 5 => new Helloworld()];

// class helloworld
class Helloworld {

    public $data;

    function __construct() {
        $this->data = "I'm an object data";
    }
}

//function to read all type of data
function recursive($obj) {
    if(is_array($obj) or is_object($obj)) {
        echo ' [ '.PHP_EOL;
      foreach($obj as $key => $value) {
          echo $key.' => ';
          recursive($value);
      }  
      echo ' ] '.PHP_EOL;
    } else {
        echo $obj.PHP_EOL;
    }
}


// call recursive
recursive($array);

?>

Это печатает примерно так:

 [ 
hello => 1
world =>  [ 
0 => 1
1 => 2
2 => 3
 ] 
! =>  [ 
0 => hello
1 => world
 ] 
5 =>  [ 
data => I'm an object data
 ] 
 ] 

Надеюсь, это поможет?

354
задан Sam 11 August 2014 в 22:43
поделиться

3 ответа

Оператор delete удаляет только ссылку, но не сам объект. Если бы он действительно удалил сам объект, другие оставшиеся ссылки были бы висячими, как удаление C ++. (И доступ к одному из них вызовет сбой. Чтобы все они стали пустыми, это означало бы дополнительную работу при удалении или дополнительную память для каждого объекта.)

Поскольку Javascript собирает мусор, вам не нужно удалять сами объекты - они будут удалены, когда на них больше нельзя будет ссылаться.

Может быть полезно удалить ссылки на объект, если вы закончили с ними, потому что это дает сборщику мусора больше информации о том, что можно восстановить. Если ссылки остаются на большой объект, это может привести к тому, что он не будет восстановлен, даже если остальная часть вашей программы фактически не использует этот объект.

445
ответ дан Jesse Rusak 23 November 2019 в 00:23
поделиться

Исходя из документации Mozilla: «Вы можете использовать оператор delete для удаления переменных, объявленных неявно, но не тех, которые объявлены с помощью оператор var. "

Вот ссылка: https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference:Operators:Special_Operators:delete_Operator

23
ответ дан David Ackerman 23 November 2019 в 00:23
поделиться

Команда delete не влияет на обычные переменные, только на свойства. После команды delete свойство не имеет значения null , оно вообще не существует.

Если свойство является ссылкой на объект, удалить Команда удаляет свойство, но не объект. Сборщик мусора позаботится об объекте, если у него нет других ссылок на него.

Пример:

var x = new Object();
x.y = 42;

alert(x.y); // shows '42'

delete x; // no effect
alert(x.y); // still shows '42'

delete x.y; // deletes the property
alert(x.y); // shows 'undefined'

(протестировано в Firefox.)

158
ответ дан Guffa 23 November 2019 в 00:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: