刚学了一些 Markdown 的基础语法,试着用一下。
相关文档:Markdown 基本语法配合基本使用
相同点:
-
null 和 undefined 都是 js 的基本数据类型
扩展:JS 的 6 种基本数据类型- Boolean
- String
- Number
- Symbol
- Null
- undefined
-
null 和 undefined 都是 falsy 值
扩展:JS 的 6 种 falsy 值- 0
- false
- “” (空字符串)
- NaN (Not a Number)
- undefined
- null
不同点:
let i = null;
console.log(i);
// null
let j;
console.log(j);
// undefined
可见:
null 代表变量有值,值为 空 , 且该值是通过 变量赋值 获得的;
undefined 代表声明了变量,但没有为其赋值。
综上:
undefined == null;
// true
undefined !== null;
// true
而且:
typeof undefined;
// "undefined"
typeof null;
// "object"
常见应用场景:
-
===(严格等于)和 ==(等于)分别在何时使用:
我们都知道 == 在做条件判断时,会强制转换用于比较的两个值的类型;而在实际开发中,只有一种情况需要用 ==,其他情况都用 === 即可
if (obj.a == null) { // 这里相当于 obj.a === null || obj.a === undefined; // 这也是 jquery 源码中推荐的写法 }
-
ES6 函数默认参数的实现:
结合上文,null 是有值的,且 null 的值为 空,通过赋值赋给变量let logHi = (param = 'hello') => {console.log(param); }; /* 默认值生效 */ logHi(); // "hello" /* 赋值调用 */ logHi('world'); // "world" /* undefined 时, 默认值生效 */ logHi(undefined); // "hello" /* null 作为值, 赋值调用 */ logHi(null); // null /* NaN 作为值, 赋值调用 */ logHi(NaN); // NaN
倘若函数这样写:
let consoleHi = (param) => { param = param || 'hello'; console.log(param); }; /* 默认值生效 */ consoleHi(); // "hello" /* 赋值调用 */ consoleHi('world'); // "world" /* undefined 时, 默认值生效 */ consoleHi(undefined); // "hello" /* null 作为值为 falsy */ consoleHi(null); // "hello" /* NaN 作为值为 falsy */ consoleHi(NaN); // "hello"
参考文献:JavaScript — Null vs. Undefined