Могу ли я установить переменные в undefined или передать undefined в качестве аргумента?

Я немного запутался в JavaScript undefined и null значения.

что значит if (!testvar) на самом деле делать? Это тест для undefined и null или просто undefined?

как только переменная определена, я могу очистить ее до undefined (поэтому удаление переменной)?

могу я пройти undefined в качестве параметра? Например:

function test(var1, var2, var3) {

}

test("value1", undefined, "value2");

10 ответов


я немного запутался в Javascript undefined & null.

не путайте null. Как правило, это имеет смысл и ведет себя аналогично концепциям других скриптовых языков для внеполосных объектов "null", " nil " или "None".

undefined, С другой стороны, это странная причуда JavaScript. Это одноэлементный объект, который представляет собой внеполосные значения, по сути, второй аналогичный, но другой null. Речь идет вверх:

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

    function dosomething(arg1, arg2) {
        if (arg2===undefined)
        arg2= DEFAULT_VALUE_FOR_ARG2;
        ...
    }
    

    С помощью этого метода вы не можете сказать, разница между dosomething(1) и dosomething(1, undefined); arg2 будет одинаковым значением в обоих. Если вам нужно сказать разницу, вы можете посмотреть на arguments.length, но делать необязательные аргументы, как это обычно не очень читаемый.

  2. когда функция не имеет return value; возвращает undefined. Обычно нет необходимости использовать такой результат возврата.

  3. когда вы объявляете переменную, имея var a оператор в блоке, но еще не присвоил ему значение, это undefined. Опять же, вам никогда не нужно полагаться на это.

  4. жуткий typeof возвращает оператор 'undefined' если его операнд является простой переменной этого не существует, вместо того, чтобы выбрасывать ошибку, как это обычно происходит, если вы попытаетесь сослаться на нее. (Вы также можете дать ему простую переменную, завернутую в круглые скобки, но не полное выражение, включающее несуществующую переменную.) Не за что, либо.

  5. это спорный вопрос. Когда вы получаете доступ к свойству объекта, который не существует, вы не сразу получаете ошибку, как на любом другом языке. Вместо этого вы получаете


вы не можете (не должны?) определите что-либо как неопределенное, поскольку переменная больше не будет неопределенной – вы просто определена это что-то.

вы не можете (не должны?) пас undefined функции. Если вы хотите передать пустое значение, используйте null вместо.

заявление if(!testvar) проверяет логические значения true / false, этот конкретный проверяет, является ли testvar оценивает в false. По определению null и undefined не должно быть не оценивается ни как true или false, но JavaScript оценивает null as false, и дает ошибку, если вы пытаетесь оценить неопределенную переменную.

правильно проверить на undefined или null используйте следующие:

if(typeof(testvar) === "undefined") { ... }

if(testvar === null) { ... }

основная разница в том, что undefined и null обозначают разные понятия.

если только null был доступен, вы не сможете определить, будет ли null был установлен намеренно в качестве значения или значение еще не было установлено, если вы не использовали громоздкий ловли ошибок: например

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;

Проверьте ссылку Здесь, вместо того, чтобы полагаться на людей, пренебрежительно говорящих мусор, как "в общем, неопределенный беспорядок JavaScript, который смущает всех". Только потому, что вы смущены, это не значит, что это беспорядок.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined

это поведение также не относится к JavaScript и завершается обобщенное понятие о том, что булевым результатом может быть true, false неизвестные (null), никакой ценности (undefined), или что-то пошло не так (error).

http://en.wikipedia.org/wiki/Undefined_value


лучший способ проверить значение null -

if ( testVar !== null )
{
    // do action here
}

и для undefined

if ( testVar !== undefined )
{
    // do action here
}

вы можете назначить avariable с undefined.

testVar = undefined;
//typeof(testVar) will be equal to undefined.

чтобы ответить на ваш первый вопрос, оператор not (!) принудит все, что ему дано, к логическому значению. Так что null, 0, false, NaN и "" (пустая строка) все будет отображаться false.


да, ты можешь, потому что undefined-это определена как неопределенные.

console.log(
   /*global.*/undefined === window['undefined'] &&
   /*global.*/undefined === (function(){})() &&
   window['undefined']  === (function(){})()
) //true

вашем случае:

test("value1", undefined, "value2")

вы можете создать ваша собственная неопределенная переменная:

Object.defineProperty(this, 'u', {value : undefined});
console.log(u); //undefined

JavaScript, как установить переменную в undefined в командной строке:

установите переменную в undefined в js JavaScript терминал командной строки, который поставляется с Java на Ubuntu 12.10.

el@defiant ~ $ 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, вы получите это значение.

вам может быть интересно, как я могу вывести неопределенное значение aliens в начале и запустить его. Это из-за подъема javascript:http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html


попробуйте это:

// found on UglifyJS
variable = void 0;

на if (something) и if (!something) обычно используется для проверки, если что-то определено или не определено. Например:

if (document.getElementById)

идентификатор преобразуется в логическое значение, так undefined трактуется как false. Есть, конечно, и другие значения (например, 0 и "), которые также интерпретируются как false, но либо идентификатор не должен разумно иметь такое значение, либо вы довольны обработкой такого значения так же, как undefined.

Javascript имеет delete оператор, который можно использовать для удаления элемента объекта. В зависимости от области переменной (т. е. если она глобальная или нет) вы можете удалить ее, чтобы сделать ее неопределенной.

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


просто для удовольствия, вот довольно безопасный способ назначить "неназначенные" переменной. Для этого потребуется, чтобы кто-то добавил к прототипу объект с точно таким же именем, как случайно сгенерированная строка. Я уверен, что генератор случайных строк можно улучшить, но я просто взял один из этого вопроса: генерировать случайные строки / символы в 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()];