我想知道JavaScript中null和undefined之间的区别。
当前回答
基本上,Undefined是javascript在运行时创建的一个全局变量,无论null是否意味着没有给变量赋值(实际上null本身就是一个对象)。
让我们举个例子:
var x; //we declared a variable x, but no value has been assigned to it.
document.write(x) //let's print the variable x
未定义,这是您将获得的输出。
现在
x=5;
y=null;
z=x+y;
你将得到5作为输出。这是Undefined和null之间的主要区别
其他回答
undefined表示变量已声明但尚未赋值:
var测试var;console.log(testVar)//显示未定义console.log(testVar类型)//显示未定义
null是赋值。它可以作为无值表示分配给变量:
var testVar=空;console.log(testVar)//显示nullconsole.log(testVar类型)//显示对象
从前面的示例中可以清楚地看到,undefined和null是两种不同的类型:undefineed是类型本身(undefine),而null是对象。
证明:
console.log(null==未定义)//false(类型不同)console.log(null==undefined)//true(但为“相同值”)console.log(null==null)//true(类型和值相同)
and
null = 'value' // Uncaught SyntaxError: invalid assignment left-hand side
undefined = 'value' // 'value'
这两个特殊值都表示为空状态。
主要区别在于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
我从这里选的
未定义的值是当变量没有已分配值。空值是表示空的、空的和空的原始值,或不存在的引用。
当您通过var声明一个变量而不给它赋值时,它将具有未定义的值。就其本身而言,如果您尝试WScript.Echo()或alert()此值,您将看不到任何内容。但是,如果您在其中附加一个空白字符串,那么它会突然出现:
var s;
WScript.Echo(s);
WScript.Echo("" + s);
您可以声明一个变量,将其设置为null,行为是相同的,只是您将看到“null”与“undefined”打印出来。这确实是一个小差异。
您甚至可以将未定义的变量与null进行比较,反之亦然,条件将为true:
undefined == null
null == undefined
然而,它们被认为是两种不同的类型。虽然undefined是一种类型,但null被认为是一个特殊的对象值。通过使用typeof()可以看到这一点,它返回一个表示变量的常规类型的字符串:
var a;
WScript.Echo(typeof(a));
var b = null;
WScript.Echo(typeof(b));
运行上述脚本将产生以下输出:
undefined
object
无论它们是不同的类型,如果您尝试访问其中一个的成员,它们的行为仍然相同,例如,它们将抛出异常。使用WSH,你会看到可怕的“'varname'为空或不是对象”,如果你幸运的话(但这是另一篇文章的主题)。
您可以明确地将变量设置为未定义,但我强烈建议您不要这样做。我建议您只将变量设置成null,并将忘记设置的值保留为未定义。同时,我真的鼓励你总是设置每个变量。JavaScript的作用域链不同于C风格语言,即使是资深程序员也很容易混淆,将变量设置为null是防止基于它的错误的最佳方法。
另一个例子是使用delete运算符时,您将看到未定义的弹出窗口。我们这些来自C世界的人可能会错误地将此解释为破坏对象,但事实并非如此。此操作所做的是从数组中移除下标或从对象中移除成员。对于数组,它不影响长度,但现在认为下标未定义。
var a = [ 'a', 'b', 'c' ];
delete a[1];
for (var i = 0; i < a.length; i++)
WScript.Echo((i+".) "+a[i]);
上述脚本的结果是:
0.) a
1.) undefined
2.) c
在读取从未存在的下标或成员时,也会返回undefined。
null和undefined之间的区别是:JavaScript永远不会将任何东西设置为null,这通常是我们所做的。虽然我们可以将变量设置为undefineed,但我们更喜欢null,因为这不是我们曾经做过的事情。当您调试时,这意味着任何设置为null的事情都是您自己做的,而不是JavaScript。除此之外,这两个特殊值几乎相等。
您可能认为undefined表示系统级、意外或错误,如缺少值,null表示程序级、正常或预期缺少值。
通过JavaScript:最终指南
const data = { banners: null }
const { banners = [] } = data;
console.log(data) // null
const data = { banners: undefined }
const { banners = [] } = data;
console.log(data) // []
推荐文章
- 在数组中获取所有选中的复选框
- 如何为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切换类