Какая причина использовать ноль вместо неопределенного в JavaScript? - PullRequest
88 голосов
/ 07 июля 2011

Я давно пишу JavaScript, и у меня никогда не было причин использовать null. Кажется, что undefined всегда предпочтительнее и служит той же цели программно. Какие практические причины использовать null вместо undefined?

Ответы [ 12 ]

1 голос
/ 23 июня 2016

Я совершенно не согласен с тем, что использование нулевого или неопределенного значения не требуется.undefined - это то, что поддерживает весь процесс создания прототипа.Поэтому компилятор только с нулевым значением не может проверить, равно ли это свойство нулевому или не определено в прототипе конечной точки.В других языках с динамической типизацией (например, Python) он выдает исключение, если вы хотите получить доступ к не определенному свойству, но для языков на основе прототипов компилятор должен также проверять родительские прототипы, и здесь есть место, где неопределенные нуждаются больше всего.смысл использования null - это просто связывание переменной или свойства с объектом, который является одиночным и имеет значение пустоты, а также использование null имеет целью производительность.Эти 2 кода имеют разное время выполнения.

var p1 = function(){this.value = 1};
var big_array = new Array(100000000).fill(1).map((x, index)=>{
    p = new p1();
    if(index > 50000000){
       p.x = "some_string";
    }

    return p;
});
big_array.reduce((sum, p)=> sum + p.value, 0)

var p2 = function(){this.value = 1, p.x = null};
var big_array = new Array(100000000).fill(1).map((x, index)=>{
    p = new p2();
    if(index > 50000000){
       p.x = "some_string";
    }

    return p; 
});
big_array.reduce((sum, p)=> sum + p.value, 0)
0 голосов
/ 17 марта 2019

Несколько человек сказали, что можно инициализировать объекты null. Я просто хотел отметить, что значения по умолчанию для аргументов деструктурирования не работают с null. Например:

const test = ({ name } = {}) => {
  console.log(name)
}

test() // logs undefined
test(null) // throws error

Это требует выполнения null проверок до для вызова функции, что может происходить часто.

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