我想知道JavaScript中null和undefined之间的区别。
当前回答
我将解释undefined、null和UncaughtReferenceError:
1-未捕获引用错误:脚本中未声明变量,没有对此变量的引用2-未定义:变量已声明但未初始化3-null:声明的变量为空值
其他回答
这两个特殊值都表示为空状态。
主要区别在于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
tl;博士
使用null设置一个已知为Object的变量。
使用undefined设置类型混合的变量。
这是我对5个原语和Object类型的用法,这解释了未定义或空的«用例»之间的区别。
一串
如果您知道一个变量在整个生命周期中只是一个字符串,那么按照惯例,您可以将其初始化为“”:
("") ? true : false; // false
typeof ""; // "string";
("Hello World") ? true : false; // true
typeof "Hello World"; // "string"
数字
如果您知道一个变量在所有生命周期中都只是一个数字,那么按照惯例,您可以将其初始化为0(如果0在您的使用中是一个重要值,则为NaN):
(0) ? true : false; // false
typeof 0; // "number";
(16) ? true : false; // true
typeof 16; // "number"
or
(NaN) ? true : false; // false
typeof NaN; // "number";
(16) ? true : false; // true
typeof 16; // "number"
布尔型
如果您知道一个变量只是一个布尔值,而所有生命周期,按照惯例,您可以将其初始化为false:
(false) ? true : false; // false
typeof false; // "boolean";
(true) ? true : false; // true
typeof true; // "boolean"
对象
如果您知道一个变量在所有生命周期中都只是一个Object,那么按照惯例,您可以将其初始化为null:
(null) ? true : false; // false
typeof null; // "object";
({}) ? true : false; // true
typeof {}; // "object"
注意:关闭null的智能用法是Object的错误版本,因为Object始终为true,因为typeof null返回对象。这意味着typeof myVarObject返回Object和null类型的一致值。
All
如果您知道一个变量有一个混合类型(所有生命周期中的任何类型),按照惯例,您可以将其初始化为undefined。
我将解释undefined、null和UncaughtReferenceError:
1-未捕获引用错误:脚本中未声明变量,没有对此变量的引用2-未定义:变量已声明但未初始化3-null:声明的变量为空值
当您在javascript中声明一个变量时,它被赋值为undefined。这意味着变量是未被修改的,可以在将来分配任何值。这也意味着您不知道该变量在声明时将保持的值。
现在可以显式地将变量赋值为null。这意味着变量没有任何值。例如,有些人没有中间名。因此,在这种情况下,最好将值null赋给person对象的中间名变量。
现在假设某人正在访问person对象的中间名变量,并且该变量的值未定义。他不知道开发人员是否忘记初始化这个变量,或者它是否没有任何值。如果它的值为null,那么用户可以很容易地推断middlename没有任何值,并且它不是一个未触及的变量。
null:缺少变量值;undefined:缺少变量本身;
..,其中变量是与值关联的符号名称。
JS可以用null隐式初始化新声明的变量,但它没有。
推荐文章
- 在数组中获取所有选中的复选框
- 如何为Firebase构建云函数,以便从多个文件部署多个函数?
- 如何发送推送通知到web浏览器?
- AngularJS:工厂和服务?
- js:将一个组件包装成另一个组件
- 父ng-repeat从子ng-repeat的访问索引
- JSHint和jQuery: '$'没有定义
- 模仿JavaScript中的集合?
- 用JavaScript验证电话号码
- 如何在HTML5中改变视频的播放速度?
- 谷歌地图API v3:我可以setZoom后fitBounds?
- ES6/2015中的null安全属性访问(和条件赋值)
- 与push()相反;
- JS字符串“+”vs concat方法
- AngularJS使用ng-class切换类