Я немного озадачен тем, что Javascript не определен & null.
Не смущайтесь насчет null
. Как правило, он имеет смысл и ведет себя аналогично концепциям других языков сценариев внеполосных «нулевых», «нулевых» или «нулевых» объектов.
undefined
, с другой стороны, это странная причуда JavaScript. Это одноэлементный объект, который представляет внеполосные значения, по сути, второй аналогичный, но отличающийся null
. Приходит:
Когда вы вызываете функцию с меньшим количеством аргументов, чем в списке аргументов в списках операторов function
, непереданные аргументы устанавливаются в undefined
. Вы можете проверить это с помощью, например ::
function dosomething(arg1, arg2) {
if (arg2===undefined)
arg2= DEFAULT_VALUE_FOR_ARG2;
...
}
С помощью этого метода вы не сможете определить разницу между dosomething(1)
и dosomething(1, undefined)
; arg2
будет одинаковым значением в обоих. Если вам нужно заметить разницу, вы можете посмотреть на arguments.length
, но такие необязательные аргументы, как правило, не очень читабельны.
Когда функция не имеет return value;
, она возвращает undefined
. Обычно нет необходимости использовать такой результат возврата.
Когда вы объявляете переменную с помощью оператора var a
в блоке, но еще не присвоили ему значение, это undefined
. Опять же, вам никогда не нужно полагаться на это.
Страшный оператор typeof
возвращает 'undefined'
, когда его операндом является простая переменная, которая не существует, вместо того, чтобы выдавать ошибку, как обычно происходит, если вы пытаетесь обратиться к ней. (Вы также можете указать простую переменную, заключенную в скобки, но , а не полное выражение, содержащее несуществующую переменную.) Для этого тоже не слишком много пользы.
Это спорный вопрос. Когда вы получаете доступ к свойству объекта, который не существует, вы не сразу получаете ошибку, как в любом другом языке. Вместо этого вы получаете undefined
объект. (И затем, когда вы попытаетесь использовать этот объект undefined
позже в сценарии, он будет работать странным образом, что будет гораздо сложнее отследить, чем если бы JavaScript только что сразу же выдал ошибку.)
Это часто используется для проверки существования свойств:
if (o.prop!==undefined) // or often as truthiness test, if (o.prop)
...do something...
Однако, поскольку вы можете назначить undefined
как любое другое значение:
o.prop= undefined;
, который фактически не определяет, надежно ли там находится имущество. Лучше использовать оператор in
, которого не было в исходной версии JavaScript Netscape, но который теперь доступен везде:
if ('prop' in o)
...
Таким образом, undefined
- это специфический JavaScript-беспорядок, который смущает всех. Помимо необязательных аргументов функции, где у JS нет другого более элегантного механизма, следует избегать undefined
. Это никогда не должно было быть частью языка; null
отлично бы сработало для (2) и (3), а (4) является ошибкой, которая существует только потому, что в начале JavaScript не имел исключений.
что на самом деле делает if (!testvar)
? Проверяется ли неопределенное и нулевое или просто неопределенное?
Такой тест на "правдивость" проверяет false
, undefined
, null
, 0
, NaN
и пустые строки. Но в этом случае, да, это действительно undefined
, с которым это связано. ИМО, это должно быть более четко об этом и сказать if (testvar!==undefined)
.
как только переменная определена, я могу очистить ее до неопределенной (следовательно, удалив переменную).
Вы, конечно, можете назначить undefined
, но это не приведет к удалению переменной. Только оператор delete object.property
действительно удаляет вещи.
delete
действительно предназначен для свойств, а не переменных как таковых. Браузеры позволят вам просто набрать delete variable
, но это не очень хорошая идея и не будет работать в строгом режиме ECMAScript Fifth Edition. Если вы хотите освободить ссылку на что-то, чтобы ее можно было собрать мусором, было бы более привычным сказать variable= null
.
Могу ли я передать в качестве параметра undefined?
Да.