我想知道JavaScript中null和undefined之间的区别。
当前回答
null:缺少变量值;undefined:缺少变量本身;
..,其中变量是与值关联的符号名称。
JS可以用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
如果变量未初始化,则该变量未定义。undefined不是对象。示例:var MyName;console.log(类型MyName);
检查控制台登录开发工具,它将被打印为未定义。
null是一个对象。如果您希望某个变量为null,则使用null。null变量存在,但值未知。它应该按语法方式分配给变量。null不会自动初始化。
示例:var MyName=null;console.log(类型MyName);检查csole登录开发工具,它将是一个对象。
通常,不要使用null以避免混淆。
标准库方法返回undefined,而不是null
let a = [10];
console.log(a[1]) //=> undefined
console.log(a.find(value => value === 5)) //=> undefined
我经常在人们的代码中看到,某个变量最初未定义,然后赋值给某个值,然后通过设置为null来清除。这是不一致的,最好回到undefined。
尽管如此,如果框架使用null,或者对于json序列化,null是有意义的。
这种差异可以用卫生纸架来解释:
一个非零值就像一个拿着一卷卫生纸的支架,管上还有卫生纸。零值就像一个空马桶纸巾管的支架。空值就像一个连纸巾管都没有的支架。未定义的值类似于缺少持有者本身。
undefined和null之间的差别很小,但有区别。值未定义的变量从未初始化。值为null的变量被显式指定为null,这意味着该变量被显地设置为没有值。如果使用null==undefined表达式比较undefineed和null,它们将相等。
推荐文章
- 我如何使用Jest模拟JavaScript的“窗口”对象?
- 我如何等待一个承诺完成之前返回一个函数的变量?
- 在JavaScript中根据键值查找和删除数组中的对象
- 使嵌套JavaScript对象平放/不平放的最快方法
- 如何以及为什么'a'['toUpperCase']()在JavaScript工作?
- 有Grunt生成index.html不同的设置
- 文档之间的区别。addEventListener和window。addEventListener?
- 如何检查动态附加的事件监听器是否存在?
- 如何写setTimeout与参数Coffeescript
- 将JavaScript字符串中的多个空格替换为单个空格
- JavaScript: override alert()
- 重置setTimeout
- 如何确保<select>表单字段被禁用时提交?
- jQuery有不聚焦的方法吗?
- 反应钩子-正确的方式清除超时和间隔