前端面试题

1.简述null和undefined的区别。
undefined:是一个表示’无’的原始值,转为数值时为NaN.是所有没有赋值变量的默认值,自动赋值

null:表示一个‘无’的对象,转为数值时为0.主动释放一个变量引用的对象,表示一个变量不再指向任何对象地址
Number(undefined)
//NaN
5+Number(null)
//5

区别:
   null表示“没有对象”,即该处不应该有值。
  1. 作为函数的参数,表示该函数的参数不是对象。
  2.  作为对象原型链的终点。   
Object.getPrototypeOf(Object.prototype)
// null
   undefined:表示缺少值,就是此处应该有一个值,但是还没有定义。
  1. 变量声明了,但没有赋值时,就等于undefined。
  2. 调用函数时,应该提供的参数没有提供,该参数等于undefined.
  3. 对象没有赋值的属性,该属性的值为undefined。
  4. 函数没有返回值,默认返回undefined。   
   
var i;
i // undefined

function f(x){console.log(x)}
f() // undefined

var  o = new Object();
o.p // undefined

var x = f();
x // undefined

补充:null作为一个对象,存储在栈内存的原因:因为null变量已知大小并且有范围上限。