持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情
undefined
出现的情况
- 定义了变量, 但是没有对其进行初始化, 那么这个变量的值就是undefined
- 定义了对象, 但是去访问这个对象中没有或者已经删除的属性时, 这时会返回undefined
- 定义了数组, 但是这是一个稀疏数组, 并且去访问这个数组中没有去赋值的位置时, 这时返回undefined
- 当一个函数, 没有return语句时, 则返回undefined
作用
当我们需要用到变量, 对象中的属性, 数组的元素去进行一些计算的时候, 可以用这个特性来进行判断, 进行一些特殊处理
请说出下面三个log语句的输出
// 访问未赋值的变量
let b;
console.log(b);
// 访问数组中未赋值的数据
let arr = {}
arr[3] = 3;
console.log(arr[1]);
// 访问对象中未定义的属性
let obj = {}
console.log(obj.name);
null
undefined表示该变量还没有初始化, 还没有赋值
null表示没有
null出现的情况
- 无法创建这个对象或者该对象不再使用手动置为null
- 没有找到这个对象 例如getElementById这个方法
null的作用
跟undefined差不多的使用方法, 例如我们在使用getElementById方法时, 可以判断返回值是否为null, 来判断这个元素是否存在
// 不再使用时, 置为null
let obj = {name:'shaosiming'}
obj = null;
console.log(obj);
// 查找一个不存在的元素
console.log(document.getElementById('title'));
NaN
NaN, not a number, 在js中当一个表达式的结果无法表达时使用该值
它和任何值都不相等, 包括它自己
NaN出现的情况
- 当数学运算中出现错误时, 如0当了除数, 对一个负数开方等
- 当一个不是数值型的数据进行运算时
console.log(0/0);
// string number
console.log('shaosiming'*2);
// 无法计算的公式
console.log(Math.sqrt(-9));
let res = NaN == NaN;
console.log(res); // false
console.log(isNaN(NaN)); // true
let res2 = isNaN('a'*2); // true
console.log(res2);
Infinity
当一个浮点数超过计算机表示的范围时, 在js中会被表示为Infinity
==的隐式转换
- 当其它类型与数值进行==运算时, 将其它类型转换为数值再进行运算
- 当布尔和其它类型进行==运算时, 将其都转换为数值再进行运算
- null和undefin进行==运算时, 返回true
console.log('3' == 3);
console.log(true == 1);
console.log(false == 0);
// 隐式转换为数值二
console.log(true == '1');
console.log(false == '0');
// null和undefin
console.log(null == undefined); // true
这些特殊的假值
undefined, null, NaN, Infin, 0, ''这些转换为字符串时, 都是false
console.log(Boolean(undefined));
console.log(Boolean(null == false));
console.log(Boolean(NaN));
console.log(Boolean(Infinity));
console.log(Boolean(0));
console.log(Boolean(''));
typeof
注意: 根据ES标准, null应该就是Null类型, 但是使用typeof来查看的时候, 返回object
console.log(typeof undefined); // undefined
console.log(typeof null); // object
console.log(typeof NaN); // number
console.log(typeof Infinity); // number