Я совершенно не согласен с тем, что использование нулевого или неопределенного значения не требуется.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)