null与undefined到底有啥区别?

  • A+
所属分类:Web前端
摘要

null 应用场景:(1)作为函数的参数,表示该函数的参数不是对象(2)作为对象原型链的终点


话不多说,直接先上结论: nullundefined 基本相同,只有细微差别

  • null 是表示缺少的标识,指示变量未指向任何对象,转为数值为 0
  • undefined 表示 “缺少值”,即该处应该有值,但还没有定义,转为数值为 NaN
//(1)null转为数值为0 console.log(Number(null));//0 console.log(null+3);//3 console.log(null == null);//true console.log(null === null); //true console.log(isNaN(null));false  //(2)undefined转为数值为NaN console.log(Number(undefined));//NaN(not a number) console.log(3+undefined);//NaN console.log(isNaN(undefined));//true  //(3)null和undefined比较 console.log(null == undefined); //true,存在隐式类型转换 console.log(null === undefined);//false /* "==="表示全等,二者类型不同,所以为false */ console.log(typeof null);//object数据类型 console.log(typeof undefined);//undefined数据类型

null 应用场景:

(1)作为函数的参数,表示该函数的参数不是对象

(2)作为对象原型链的终点

console.log(Object.getPrototypeOf(Object.prototype));//null

undefined 应用场景:

(1)一个没有被赋值的变量的类型是undefined

(2)调用函数时,应该提供的参数没有提供,该参数为undefined

(3)对象没有赋值的属性,该属性的值为undefined

(4)一个函数如果没有使用return语句指定返回值,就会返回undefined

//(1)变量未赋值         let a console.log(a);//undefined  //(2)函数参数未赋值 (function fn(x) {     console.log(x); //undefined })()  //(3)对象属性未赋值 let obj = {     name:'张三' } console.log(obj.name); console.log(obj.age);//undefined  //(4)函数没有返回值 function fn(){} var x = fn(); console.log(x);//undefined