我想知道JavaScript中null和undefined之间的区别。


当前回答

我将解释undefined、null和UncaughtReferenceError:

1-未捕获引用错误:脚本中未声明变量,没有对此变量的引用2-未定义:变量已声明但未初始化3-null:声明的变量为空值

其他回答

null是一个特殊值,表示“无值”。null是一个特殊的对象,因为typeof null返回“object”。

另一方面,undefined表示变量尚未声明,或未给定值。

未定义表示变量已声明但没有值:

var var1;
alert(var1); //undefined
alert(typeof var1); //undefined

Null是赋值:

var var2= null;
alert(var2); //null
alert(typeof var2); //object

这两个特殊值都表示为空状态。

主要区别在于undefined表示尚未初始化的变量的值,而null表示有意缺少对象。

但是,变量编号已定义,未分配初始值:

let number;
number; // => undefined

number变量未定义,这明显表示变量未初始化当访问不存在的对象属性时,会发生相同的未初始化概念:

const obj = { firstName: 'Dmitri' };
obj.lastName; // => undefined

由于obj中不存在lastName属性,JavaScript正确地将obj.lastName计算为undefined。

在其他情况下,您知道变量需要保存对象或函数以返回对象。但由于某些原因,您无法实例化对象。在这种情况下,null是丢失对象的有意义的指示符。

例如,clone()是一个克隆普通JavaScript对象的函数。该函数应返回一个对象:

function clone(obj) {
  if (typeof obj === 'object' && obj !== null) {
    return Object.assign({}, obj);
  }
  return null;
}
clone({name: 'John'}); // => {name: 'John'}
clone(15);             // => null
clone(null);           // => null

然而,clone()可以用非对象参数调用:15或null(或通常为原始值,null或undefined)。在这种情况下,该函数无法创建克隆,因此它返回null-缺少对象的指示符。

typeof运算符区分两个值:

typeof undefined; // => 'undefined'
typeof null;      // => 'object'

严格质量运算符==正确区分undefined和null:

let nothing = undefined;
let missingObject = null;
nothing === missingObject; // => false

Null始终是内存中存在的未知对象,而undefined则不是。

空的类型为Object,而未定义的类型为undefined。Null表示“无值”,而undefined表示“不存在”。

typeof undefined; //undefined
typeof null; // Object
undefined !== null; //true
undefined == null; //true
undefined === null; //false
var var1;
var1; //undefined 
var var2 = null;
var2; //null