Могу ли я установить переменные в undefined или передать undefined в качестве аргумента?
Я немного смущен о значениях JavaScripts undefined
и null
.
Что делает if (!testvar)
на самом деле? Проверяет ли он undefined
и null
или просто undefined
?
Как только переменная определена, я могу ее очистить до undefined
(поэтому удаляя переменную)?
Могу ли я передать undefined
в качестве параметра? Например:.
function test(var1, var2, var3) {
}
test("value1", undefined, "value2");
Ответы
Ответ 1
Я немного смущен Javascript undefined и null.
Не путайтесь с null
. Как правило, это имеет смысл и ведет себя так же, как и другие концепции языков сценариев внеполосных объектов "null", "nil" или "None".
undefined
, с другой стороны, это странный JavaScript quirk. Это одноэлементный объект, представляющий внеполосные значения, по существу второй второй, но отличный 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
. Опять же, вам не стоит полагаться на это.
-
Оператор spooky typeof
возвращает 'undefined'
, когда его операнд является простой переменной, которая не существует, вместо того, чтобы бросать ошибку, как обычно, если вы попытаетесь обратиться к ней. (Вы также можете дать ему простую переменную, заключенную в круглые скобки, но не полное выражение, содержащее несуществующую переменную.) Не так много для этого.
-
Это спорный вопрос. Когда вы получаете доступ к объекту объекта, которого не существует, вы не сразу получаете ошибку, как на любом другом языке. Вместо этого вы получаете объект undefined
. (И затем, когда вы попытаетесь использовать этот объект undefined
позже в script, это пойдет не так странным образом, что гораздо труднее отследить, чем если бы 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)
на самом деле? Проверяет ли он на undefined и null или просто undefined?
Такой тест правности проверяется на false
, undefined
, null
, 0
, NaN
и пустые строки. Но в этом случае, да, это действительно undefined
, что это касается. ИМО, он должен быть более явным и сказать if (testvar!==undefined)
.
После определения переменной я могу удалить ее обратно до undefined (поэтому удаляя переменную).
Вы можете назначить ему undefined
, но это не приведет к удалению переменной. Только оператор delete object.property
действительно удаляет вещи.
delete
действительно предназначен для свойств, а не для переменных как таковых. Браузеры позволят вам уйти с прямым delete variable
, но это не очень хорошая идея и не будет работать в строгом режиме ECMAScript Fifth Edition. Если вы хотите высвободить ссылку на что-то, чтобы можно было собрать мусор, было бы более обычным сказать variable= null
.
Могу ли я передать undefined в качестве параметра?
Да.
Ответ 2
Вы не можете (не должны?) определять что-либо как undefined, поскольку переменная больше не будет undefined – вы просто определили его для чего-то.
Вы не можете (не должны?) передать undefined
функции. Если вы хотите передать пустое значение, используйте null
вместо этого.
В заявлении if(!testvar)
проверяются значения boolean true/false, этот конкретный проверяет, оценивает ли testvar
значение false
. По определению null
и undefined
не следует оценивать как true
или false
, но JavaScript оценивает null
как false
и дает ошибку, если вы попытаетесь оценить переменную undefined.
Чтобы правильно протестировать undefined
или null
, используйте следующие команды:
if(typeof(testvar) === "undefined") { ... }
if(testvar === null) { ... }
Ответ 3
Основное отличие состоит в том, что undefined
и null
представляют разные понятия.
Если доступно только null
, вы не сможете определить, было ли умышленно установлено значение null
в качестве значения или значение еще не установлено, если вы не использовали громоздкую ошибку: eg
var a;
a == null; // This is true
a == undefined; // This is true;
a === undefined; // This is true;
Однако, если вы намеренно установили значение null
, строгое равенство с undefined
завершается с ошибкой, что позволяет различать значения null
и undefined
:
var b = null;
b == null; // This is true
b == undefined; // This is true;
b === undefined; // This is false;
Обратите внимание на ссылку здесь вместо того, чтобы полагаться на людей, которые пренебрежительно говорят, что барахло вроде "В общем, undefined - это беспорядок, специфичный для JavaScript, который смущает всех". Просто потому, что вы в замешательстве, это не значит, что это беспорядок.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined
Это поведение также не относится к JavaScript, и оно завершает обобщенное понятие о том, что логический результат может быть true
, false
, неизвестным (null
), no value (undefined
), или что-то пошло не так (error
).
http://en.wikipedia.org/wiki/Undefined_value
Ответ 4
Лучший способ проверить нулевые значения -
if ( testVar !== null )
{
// do action here
}
и для undefined
if ( testVar !== undefined )
{
// do action here
}
Вы можете назначить avariable с помощью undefined.
testVar = undefined;
//typeof(testVar) will be equal to undefined.
Ответ 5
Чтобы ответить на ваш первый вопрос, оператор not (!
) будет принуждать все, что он задан, к логическому значению. Таким образом, null
, 0
, false
, NaN
и ""
(пустая строка) будут отображаться как ложные.
Ответ 6
ДА, вы можете, потому что undefined defined как undefined.
console.log(
/*global.*/undefined === window['undefined'] &&
/*global.*/undefined === (function(){})() &&
window['undefined'] === (function(){})()
) //true
ваш случай:
test("value1", undefined, "value2")
вы также можете создать свою собственную переменную undefined:
Object.defineProperty(this, 'u', {value : undefined});
console.log(u); //undefined
Ответ 7
JavaScript, как установить переменную в undefined в командной строке:
Задайте переменную undefined в терминале командной строки js
javascript, который поставляется с Java на Ubuntu 12.10.
[email protected] ~ $ js
js> typeof boo
"undefined"
js> boo
typein:2: ReferenceError: boo is not defined
js> boo=5
5
js> typeof boo
"number"
js> delete(boo)
true
js> typeof boo
"undefined"
js> boo
typein:7: ReferenceError: boo is not defined
Если вы установите переменную в undefined в javascript:
Поместите это в myjs.html:
<html>
<body>
<script type="text/JavaScript">
document.write("aliens: " + aliens);
document.write("typeof aliens: " + (typeof aliens));
var aliens = "scramble the nimitz";
document.write("found some aliens: " + (typeof aliens));
document.write("not sayings its aliens but... " + aliens);
aliens = undefined;
document.write("aliens deleted");
document.write("typeof aliens: " + (typeof aliens));
document.write("you sure they are gone? " + aliens);
</script>
</body>
</html>
Он печатает это:
aliens: undefined
typeof aliens: undefined
found some aliens: string
not sayings its aliens but... scramble the nimitz
aliens deleted
typeof aliens: undefined
you sure they are gone? undefined
ВНИМАНИЕ! При настройке переменной на undefined вы устанавливаете переменную в другую переменную. Если какой-то подлый человек работает undefined = 'rm -rf /';
, то всякий раз, когда вы устанавливаете переменную в undefined, вы получите это значение.
Вам может быть интересно, как я могу вывести значение undefined пришельцев в начале и все еще запустить. Это из-за javascript hoisting: http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html
Ответ 8
Для if (something)
и if (!something)
обычно используется для проверки того, определено или не определено какое-либо событие. Например:
if (document.getElementById)
Идентификатор преобразуется в булево значение, поэтому undefined
интерпретируется как false
. Конечно, существуют и другие значения (например, 0 и '), которые также интерпретируются как false
, но либо идентификатор не должен иметь разумного значения, либо вы довольны тем, что рассматриваете такое значение так же, как undefined.
Javascript имеет оператор delete
, который может использоваться для удаления члена объекта. В зависимости от области действия переменной (т.е. Если она глобальна или нет) вы можете удалить ее, чтобы сделать ее undefined.
Нет ключевого слова undefined
, которое можно использовать как литерал undefined. Вы можете опустить параметры в вызове функции, чтобы сделать их undefined, но это можно использовать только для отправки меньших параметров функции, вы не можете опустить параметр в середине.
Ответ 9
Просто для удовольствия, здесь достаточно безопасный способ присвоить переменную "неназначенный". Для этого для столкновения потребуется, чтобы кто-то добавил к прототипу объекта с точно таким же именем, что и случайная сгенерированная строка. Я уверен, что генератор случайных строк может быть улучшен, но я просто взял один из этого вопроса: Генерировать случайные строки/символы в JavaScript
Это работает, создавая новый объект и пытаясь получить доступ к свойству на нем с произвольно сгенерированным именем, которое, как мы предполагаем, не существует и, следовательно, будет иметь значение undefined.
function GenerateRandomString() {
var text = "";
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for (var i = 0; i < 50; i++)
text += possible.charAt(Math.floor(Math.random() * possible.length));
return text;
}
var myVar = {}[GenerateRandomString()];
Ответ 10
Попробуйте следующее:
// found on UglifyJS
variable = void 0;