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
что такое ноль? - Активный выбор пуст
В приведенном выше примере мы можем увидеть интересное явление -Мы не знаем, что когда система угадает, мы получимundefined
;иnull
тогда нам нужно активно просить об этом
Итак, в чем разница между ними?
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
Суммировать
Пришло время разобраться в том, что сказала Блю, так что сначала
-
null
активно используется,undefined
является пассивной альтернативой -
null
по существу равен нулю,undefined
По сути объект (автор js указывает только тип) - судить
null
иundefined
, всегда следует использовать строгое суждение (===) - js «нет прохода», «не дается» и
undefined
базовая эквивалентность; иnull
имеет значение - например: параметр по умолчанию
Есть ошибка? Хотите добавить?
Спасибо за просмотр этого урока. Если у вас есть какие-либо вопросы или вы хотите связаться с Blue, пожалуйста, оставьте сообщение напрямую. Если вы обнаружите какую-либо неуместность в статье, пожалуйста, укажите на нее, заранее спасибо