我想知道JavaScript中null和undefined之间的区别。
当前回答
这种差异可以用卫生纸架来解释:
一个非零值就像一个拿着一卷卫生纸的支架,管上还有卫生纸。零值就像一个空马桶纸巾管的支架。空值就像一个连纸巾管都没有的支架。未定义的值类似于缺少持有者本身。
其他回答
这两个特殊值都表示为空状态。
主要区别在于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都用于表示缺少某个值。
var a = null;
a被初始化和定义。
typeof(a)
//object
null是JavaScript中的对象
Object.prototype.toString.call(a) // [object Object]
var b;
b未定义且未初始化
未定义的对象财产也是未定义的。例如,“x”未在对象c上定义,如果您尝试访问c.x,它将返回undefined。
通常,我们为未定义的变量赋值null。
如果变量未初始化,则该变量未定义。undefined不是对象。示例:var MyName;console.log(类型MyName);
检查控制台登录开发工具,它将被打印为未定义。
null是一个对象。如果您希望某个变量为null,则使用null。null变量存在,但值未知。它应该按语法方式分配给变量。null不会自动初始化。
示例:var MyName=null;console.log(类型MyName);检查csole登录开发工具,它将是一个对象。
好吧,当我们听到null和undefined时,我们可能会感到困惑,但让我们简单地开始吧,它们都是假的,在很多方面都很相似,但JavaScript的奇怪部分,使它们有一些显著的区别,例如,typeof null是“object”,而typeof undefineed是“undefined'。
typeof null; //"object"
typeof undefined; //"undefined";
但如果你用下面的==检查它们,你会发现它们都是假的:
null==undefined; //true
此外,您可以将null赋给对象属性或原语,而undefined可以通过不赋给任何对象来实现。
我创建了一个快速的图像,以一目了然地显示差异。
在javascript中,所有变量都存储为键值对。每个变量存储为variable_name:variable_value/reference。
undefined表示在内存中给了变量一个空间,但没有给它赋值。作为最佳实践,不应将此类型用作赋值。
在这种情况下,如何表示何时希望变量在代码中的稍后时间没有值?您可以使用类型null,这也是一种用于定义相同事物的类型,缺少值,但它与undefined不同,因为在本例中,内存中实际上有值。该值为空
两者相似,但用法和含义不同。
推荐文章
- 如何使用Jest测试对象键和值是否相等?
- 将长模板文字行换行为多行,而无需在字符串中创建新行
- 如何在JavaScript中映射/减少/过滤一个集?
- Bower: ENOGIT Git未安装或不在PATH中
- 添加javascript选项选择
- 在Node.js中克隆对象
- 为什么在JavaScript的Date构造函数中month参数的范围从0到11 ?
- 使用JavaScript更改URL参数并指定默认值
- 在window.setTimeout()发生之前取消/终止
- 如何删除未定义和空值从一个对象使用lodash?
- 检测当用户滚动到底部的div与jQuery
- 在JavaScript中检查字符串包含另一个子字符串的最快方法?
- 检测视口方向,如果方向是纵向显示警告消息通知用户的指示
- ASP。NET MVC 3 Razor:在head标签中包含JavaScript文件
- 禁用从HTML页面中拖动图像