Установка вещей на неопределенное - PullRequest
1 голос
/ 15 марта 2012

Я вижу это по всей нашей кодовой базе:

(function(undefined) {
    var foo = {
        dirtyRow: undefined,
        dirtyCells: undefined,
        ...
        clearDirty: function () {
            this.dirtyRow = undefined;
            this.dirtyCells = undefined;
        }
    }
})();

Может кто-нибудь сформулировать для меня, что с этим не так?Что мы должны делать вместо этого?

Ответы [ 3 ]

3 голосов
/ 15 марта 2012

null имеет больше смысла, чем undefined в этом контексте, потому что вы определяете переменные, но еще не присваиваете им значение.

Однако и null, и undefined являются ложными значениями, поэтому в большинстве случаев поведение будет одинаковым.

null - ключевое слово, тогда как undefined - нет. Так что null будет более «надежным», даже если вы используете аргумент, чтобы убедиться, что undefined на самом деле не определен.

0 голосов
/ 15 марта 2012

Я не вижу ничего плохого в этом коде. Этот подход используется для гарантии того, что undefined действительно «неопределено», потому что в нестрогом режиме (ES5) вы можете переопределить это значение (поэтому, если вы используете сторонний скрипт или вредоносный скрипт будет внедрен на вашу страницу). 1002 *

По сути, у вас есть аргумент, и вы вызываете эту функцию без передачи какого-либо значения, поэтому оно будет "неопределенным". Вы можете получить тот же результат, имея:

(function(u) {
    var foo = {
        dirtyRow: u,
        dirtyCells: u,
        ...
        clearDirty: function () {
            this.dirtyRow = u;
            this.dirtyCells = u;
        }
    }
})();

Но, конечно, использование undefined имеет больше смысла.

0 голосов
/ 15 марта 2012

Одна вещь, которая является неправильной, это то, что вы не должны использовать undefined «константу» вообще, пока все браузеры не будут до последней версии спецификаций Javascript.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...