Почему там 'пустое' значение в JavaScript?

111
задан Donald Duck 1 May 2018 в 08:28
поделиться

7 ответов

Вопрос не действительно, "почему там нулевое значение в JS" - там, действительно ли нулевое значение является каким-то на большинстве языков, и это обычно считают очень полезным.

вопрос, "почему там не определены значение в JS". Крупнейшие места, где это используется:

  1. , когда Вы объявляете 'var x'; но не присваивайте ему, x содержит неопределенный;
  2. то, когда Ваша функция получает меньше аргументов, чем он, объявляет;
  3. , когда Вы получаете доступ к несуществующему свойству объекта.

'пустой указатель', конечно, работал бы точно также на (1) и (2) *. (3) должен действительно немедленно выдать исключение, и то, что оно не делает, вместо этого возвращая это странное 'неопределенный', который перестанет работать позже, является большим источником отладки трудности.

*: Вы могли также утверждать, что (2) должен выдать исключение, но тогда необходимо было бы обеспечить лучший, более явный механизм для значения по умолчанию/аргументов переменной.

Однако JavaScript первоначально не имел исключений или любого способа спросить объект, если он имел участника под определенным именем - единственный путь был (и иногда все еще) получить доступ к участнику и видеть то, что Вы получаете. Учитывая, что 'пустой указатель' уже имел цель, и Вы могли бы хорошо хотеть установить участника на него, различное внеполосное значение требовалось. Таким образом, мы имеем 'неопределенный', это проблематично, как Вы указываете, и это - другой большой JavaScript 'функция', от которой мы никогда не будем в состоянии избавиться.

я на самом деле использую неопределенный, когда я хочу сбросить значения свойств, больше не используемых, но который я не хочу удалять. Я должен использовать пустой указатель вместо этого?

Да. Сохраните 'неопределенными' как специальное значение для передачи сигналов, когда другие языки могли бы выдать исключение вместо этого.

'пустой указатель' обычно лучше, за исключением некоторого IE интерфейсы DOM, где установка чего-то к 'пустому указателю' может дать Вам ошибку. Часто в этой установке случая на пустую строку имеет тенденцию работать.

72
ответ дан bobince 24 November 2019 в 03:05
поделиться

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

неопределенный отсутствие типа и значения, и пустой указатель является отсутствием значения.

, Кроме того, если Вы делаете простой '==' сравнения, Вы правы, они выходят то же. Но попробуйте ===, который сравнивает и тип и значение, и Вы заметите различие.

37
ответ дан Eddie Parker 24 November 2019 в 03:05
поделиться

Совершенно возможно нуждаться в обоих. Например, при запросах WMI, совершенно возможно иметь возврат класса свойства, которые имеют нулевое значение. Они определяются, они просто, оказывается, содержат пустой указатель в то время.

6
ответ дан EBGreen 24 November 2019 в 03:05
поделиться

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

3
ответ дан AnthonyWJones 24 November 2019 в 03:05
поделиться

Я думаю, что Ваше заключение, что JavaScript определяет undefined как ", нет такого свойства" и null, поскольку "свойство не имеет никакого значения", совершенно корректно. И на языке, столь же динамичном как JavaScript, это - очень важное различие. Использование утки, вводящей средства, которые нам необходимо дифференцировать между свойством, не существующим и не имеющим значение. Это - наши основные средства происходящей информации о типе. на статически типизированном языке существует определенное различие между полем, являющимся пустым и полем, не существующим. В JavaScript это не отличается. Однако это проверяется во времени выполнения и может быть изменено до этого времени.

я оказываюсь перед необходимостью соглашаться, что реализация является странной как много времени, различие размывается. Однако я думаю, что в JavaScript различие важно. И способность присвоиться undefined важна.

я не забываю читать сообщение в блоге только что о RPG онлайн, записанном в JavaScript. Это использовало примеры, где объекты были созданы как копии существующих экземпляров, а не прототипов (классы, функции, безотносительно), и были тогда изменены. Это действительно заставило меня понять, как мощный, что undefined мог быть при изменении существующих объектов, но я не могу помнить, кто записал его.

6
ответ дан DavidRR 24 November 2019 в 03:05
поделиться

Попробуйте этот пример:

<html>
<head>
    <script type="text/javascript">
        function ShowObjProperties(obj) {
            var property, propCollection = "";

            for(property in obj) {
                propCollection += (property + ": " + obj[property] + "\n");
            }

            alert(propCollection);
        }

        var obj = {
            userid: 3,
            name: 'me!',
            speak: function() { alert('Hi! My name is ' + this.name + ' and my ID is ' + this.userid + '.'); }
        }

        //Shows all properties
        ShowObjProperties(obj);

        //The Speak function is no longer in the list!
        delete obj.speak;
        alert(typeof obj.speak);
        ShowObjProperties(obj);

        //The UserID is still listed, it just has no value!
        obj.userid = null;
        ShowObjProperties(obj);
    </script>
</head>
<body>

</body>
</html>

я думаю, что существует очень реальное использование для 2 различных типов здесь.

0
ответ дан EndangeredMassa 24 November 2019 в 03:05
поделиться

То, к чему это сводится, является javascripts динамическим характером.

Вещи могут быть не определены так, чтобы они могли быть добавлены позже. Это возможно, почему JavaScript так мощен и расширяем.

0
ответ дан Rob Stevenson-Leggett 24 November 2019 в 03:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: