Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Что занимает меньше памяти, null или undefined? (https://javascript.ru/forum/misc/28617-chto-zanimaet-menshe-pamyati-null-ili-undefined.html)

jsuse 27.05.2012 01:47

Что занимает меньше памяти, null или undefined?
 
У меня есть перменная:
var one = "one";

Она свое отработала, я хочу ее "удалить", "обнулить", в общем очистить как-то память, которую она занимала. Как это правильно сделать?
one = null;   // присвоить null?
one = undefined;  // или присвоить undefined?

Или может есть какая-то специальная для этого функция типа как unset в php?

Автоматический сборщик мусора в данном случае не годится, мне нужно специально ее удалить.

jsuse 27.05.2012 02:09

Цитата:

Сообщение от nasqad (Сообщение 176785)
delete one;
//равнозначно
one = undefined;

Я тоже думал, что undefined - это правильнее, чем null. Но смотрите, что тут в учебнике написано:
undefined — специальное значение, которое, как и null, образует свой собственный тип. Оно имеет смысл «значение не присвоено».
Если переменная объявлена, но в неё ничего не записано, то ее значение как раз и есть undefined.

Т.е. выходит, что если переменная == undefined, то она объявлена. А если она объявлена, хоть ей и ничего не присвоено, место в памяти она уже какое-то занимает. А вот хотелось бы удалить, чтобы даже память не занимала.

Kolyaj 27.05.2012 09:55

Цитата:

Сообщение от jsuse
Что занимает меньше памяти, null или undefined?

facepalm.jpg


В JS есть GarbageCollector, он именно для того и создан, чтобы не думать об освобождении памяти.

Раед 27.05.2012 13:40

Цитата:

Сообщение от nasqad
delete one;
//равнозначно
one = undefined;

Равнозначно? Хм, это ещё вопрос.
tst = {a : 'string'}
alert('a' in tst);
tst.a = undefined;
alert('a' in tst);

tst = {a : 'string'}
alert('a' in tst);
delete tst.a;
alert('a' in tst);

melky 27.05.2012 14:44

Цитата:

Сообщение от jsuse (Сообщение 176780)
У меня есть перменная:
var one = "one";

Она свое отработала, я хочу ее "удалить", "обнулить", в общем очистить как-то память, которую она занимала. Как это правильно сделать?
one = null;   // присвоить null?
one = undefined;  // или присвоить undefined?

Или может есть какая-то специальная для этого функция типа как unset в php?

Автоматический сборщик мусора в данном случае не годится, мне нужно специально ее удалить.

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

т.е. :

var long_life; // это будет жить.

    function count(a) {
        var b = 5, c = 2.4, d = Math.PI; // это - еда.
        return d * c + b * a;
    }

set_life = function() {
    long_life = count(Mah.random());
};



Цитата:

Сообщение от Раед
Равнозначно? Хм, это ещё вопрос.

и ещё один :
(function(){
    var a = "test";
    delete a;
    alert(a);
})();

Раед 27.05.2012 15:06

Цитата:

Сообщение от melky
и ещё один :

Ну дык переменная var'ом объявлена => не удаляется.
И не обязательно было её в функцию оборачивать.

jsuse 27.05.2012 15:40

Цитата:

Сообщение от Kolyaj (Сообщение 176802)
facepalm.jpg
В JS есть GarbageCollector, он именно для того и создан, чтобы не думать об освобождении памяти.

Умник нашелся. Вася, не позорся.

melky 27.05.2012 18:44

Цитата:

Сообщение от Раед
И не обязательно было её в функцию оборачивать.

var a = "1234";
alert( a + " === "+ window.a);
delete window.a;
alert(window.a);

Раед 27.05.2012 19:01

var a=5;
alert(a);
delete a;
alert(a);

Я не говорил, что её нельзя удалить как свойство window. Я говорил, что её нельзя удалить как переменную.

melky 27.05.2012 20:12

Цитата:

Сообщение от Раед (Сообщение 176920)
var a=5;
alert(a);
delete a;
alert(a);

Я не говорил, что её нельзя удалить как свойство window. Я говорил, что её нельзя удалить как переменную.

для этого я и обернул в функцию, чтобы переменная не была свойством window.


Часовой пояс GMT +3, время: 09:56.