🔥"Погрузитесь в суть" Вы действительно понимаете undefined и null

JavaScript
🔥"Погрузитесь в суть" Вы действительно понимаете undefined и null

undefinedиnullЭто очень распространено в js, и оба представляют значение «пустой», но есть тонкие различия, эти две вещи, которые вы можете видеть каждый день, вы действительно их понимаете? Приходите с Блу и узнайте друг друга сноваundefinedиnullБар

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

Эта статья будет содержать следующее

  • И undefined, и null пусты, но это не одно и то же.Почему в JS два пустых места?
  • что не определено? Когда появляется undefined?
  • что такое ноль? Когда используется ноль?
  • Природа undefined и null
  • Как правильно использовать undefined и null

Краткое введение

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

if(undefined){
  console.log('真的');
}else{
  console.log('假的');  //执行
}

if(null){
  console.log('真的');
}else{
  console.log('假的');  //执行
}

Даже официальный ** «очень внимательный», чтобы сделать null и undefined равными **

console.log(null==undefined); //true

Так,undefinedиnullЭто точно так же? нет

//松散比较(loose equality)
console.log(null == undefined); //true

//严格比较(strict equality)
console.log(null === undefined); //false

Приведенный выше пример показывает, что

  • undefinedиnullне одно и то же, строгое сравнение определит, что оно не равно

  • Каковы они, в чем различия и как они влияют на нас?

Повторно распознать неопределенное

когда появляется undefined

в прямом смысле,undefinedЭто означает «неопределенный», поэтому, когда мы не определяем вещь, она не определена.

//a并未定义过
console.log(typeof a);  //"undefined"

//注意,这里只能使用typeof,直接使用a会造成报错
console.log(a);  //Uncaught ReferenceError: a is not defined

Мы знаем, что js слабо типизирован, поэтому сама переменная не имеет типа, только данные, хранящиеся в переменной, поэтому, когда переменная не имеет никаких данных, она такжеundefined

//定义但未赋值
let a;

console.log(a);  //undefined

undefinedЭто один из примитивных типов данных js, мы также можем напрямую присваивать значение undefined переменным.

let a=undefined;

console.log(a); //undefined

Конечно, не только переменные, но и undefined в функциях

//1-参数
function blueFn(a, b){
  console.log(a, b);
}

blueFn(12);  //12, undefined——因为b没有传值,所以是undefined


//2-返回值
function blueFn1(){
  return;
}
function blueFn2(){
  
}

blueFn1();  //undefined——return没写东西,类似于变量没赋值
blueFn2();  //undefined——连return都没有,跟变量没有声明过差不多

также появляются в объектеundefined, когда мы используем несуществующее свойство, мы получим undefined в качестве значения (строго типизированные языки, такие как ts, будут сообщать об ошибке напрямую)

const blue={age: 18, gender: 'male'};

console.log(blue.height); //undefined——因为就没有叫height的东西

в заключении,undefinedЕсть пять сценариев, которые появятся

  • Действительно не определено (доступен только typeof)
  • Определено, но не назначено
  • Прямое присвоение или возврат undefined
  • Функция с пустым возвратом или вообще без возврата
  • нет соответствующего свойства

что не определено? - вынужденные альтернативы

После приведенного выше расчесывания мы действительно можем видеть, что -undefinedпросто нет ценности, будь то без присваивания, без передачи параметров, без возврата или без такого свойства, система не сможет найти соответствующий контент, таким образом, возвращая undefined как «альтернативный вариант»

Повторно распознать ноль

nullиundefinedразные,nullДело не в том, что вам не нужно выбирать выход.хочу использоватьnullдолжны активно запрашивать

когда появляется ноль

//变量
let name;
console.log(name);  //undefined

let name='blue';
console.log(name);  //null



//函数-参数
function fn1(a){
  console.log(a);
}
fn1(); //undefined
fn1(null); //null



//函数-返回值
function fn2(){
  return; //undefined
}
function fn2(){
  return null; //undefined
}

//对象属性
const person={name: 'blue'};
console.log(person1.age); //undefined

const person={name: 'blue', age: null};
console.log(person1.age); //null

что такое ноль? - Активный выбор пуст

В приведенном выше примере мы можем увидеть интересное явление -Мы не знаем, что когда система угадает, мы получимundefinednullтогда нам нужно активно просить об этом

Итак, в чем разница между ними?

nullявляется общей ценностью и нуждается в активном использовании, мало чем отличается от 12, 'abc', false

  • Только при активном использованииnullпоявится
  • нет заявленияnullне выскочит

undefinedэто особая ценность, это последняя альтернатива в js

  • Когда мы запрашиваем у js «нечто, чего не существует», мы получаемundefined(Например: неназначенные переменные, невозвращенные функции, непереданные параметры)

Природа undefined и null

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

null по сути является нулем, а undefined по сути является специальным объектом

Number(null); //0
Number(undefined); //NaN

12+null; //12
12+undefined; //NaN


//跟数字比较会更加明显
-5<null; //true——null是0,-5<0

-5<undefined;  //false
-5>undefined;  //false
-5==undefined; //false
//undefined就不是数字,跟数字没有可比性

Конечно, я думаю, кто-то скажет - "Нет, Блю, тип null - это Object", это просто, потому чтоjs полно субъективных правил автора, вот и все

//null的类型是object,没错
typeof null; //"object"

//但这只是作者硬性规定null的类型罢了
//不然怎么解释
12+null  //12
5-null  //5
8*null  //0
19&null //0

Есть объяснения и приложения, совершенные

Из вышесказанного мы в основном понимаем null и undefined, есть ли разница в использовании? Не много, но есть

Параметры по умолчанию и undefined, null

//age参数有默认值——也就是说,不传就是18
function blue(age=18){
  console.log(age);
}


//传个undefined跟没传一样,系统认为“没有”和undefined等价
blue(undefined);  //18

//传null就是有了,不会触发默认值
blue(null);  //null

Деструктурирующее присваивание и undefined, null

Аналогично параметрам, на самом деле деструктурирующее присваивание имеет аналогичную ситуацию.

const [a=1,b=2]=[undefined, null];

//undefined就是没给——触发默认值
console.log(a);  //1

//null是给了,但是空——不触发默认值
console.log(b);  //null

Суммировать

Пришло время разобраться в том, что сказала Блю, так что сначала

15-三连

  • nullактивно используется,undefinedявляется пассивной альтернативой
  • nullпо существу равен нулю,undefinedПо сути объект (автор js указывает только тип)
  • судитьnullиundefined, всегда следует использовать строгое суждение (===)
  • js «нет прохода», «не дается» иundefinedбазовая эквивалентность; иnullимеет значение - например: параметр по умолчанию

Есть ошибка? Хотите добавить?

Спасибо за просмотр этого урока. Если у вас есть какие-либо вопросы или вы хотите связаться с Blue, пожалуйста, оставьте сообщение напрямую. Если вы обнаружите какую-либо неуместность в статье, пожалуйста, укажите на нее, заранее спасибо