我想知道JavaScript中null和undefined之间的区别。
当前回答
我想添加一个与空和未定义之间的细微差别有关的知识点。当您尝试从头开始学习Vanilla JavaScript(JS)时,这一点很好:
null是JS中的保留关键字,而undefined是运行时环境的全局对象。
在编写代码时,这种差异是不可识别的,因为null和undefined总是在JavaScript语句的右侧(RHS)使用。但当你在表达式的左手边(LHS)使用它们时,你可以很容易地观察到这种差异。因此JS解释器将以下代码解释为错误:
var null = 'foo'
它给出以下错误:
未捕获语法错误:意外的标记null
同时,以下代码运行成功,尽管我不建议在现实生活中这样做:
var undefined = 'bar'
这是因为undefined是全局对象(如果JavaScript在浏览器中运行,则为窗口对象)上的一个属性
其他回答
在JavasScript中有5种基本数据类型:String、Number、Boolean、null和undefined。我将尝试用一些简单的例子来解释。
假设我们有一个简单的函数
function test(a) {
if(a == null) {
alert("a is null");
} else {
alert("The value of a is " + a);
}
}
此外,在上述函数中,if(a==null)与if(!a)相同。
现在,当我们调用此函数而不传递参数
test(); // will alert "a is null";
test(4); // will alert "The value of a is " + 4;
also
var a;
alert(typeof a);
这将给出未定义的;我们声明了一个变量,但没有为该变量赋值;
但如果我们写
var a = null;
alert(typeof a); // will give alert as object
所以null是一个对象。在某种程度上,我们为“a”分配了一个空值
由于typeof返回undefined,undefineed是一种类型,其中null是一个初始值设定项,表示变量指向任何对象(实际上Javascript中的所有内容都是一个对象)。
除了不同的含义外,还有其他区别:
对象析构函数对这两个值的作用不同:常量{a=“默认”}={a:未定义};//a是“默认值”常量{b=“默认”}={b:null};//b为空JSON.stringify()保持null,但省略未定义const json=json.stringify({undefinedValue:undefined,nullValue:null});console.log(json);//打印{“nullValue”:null}运算符类型console.log(类型未定义);//“未定义”console.log(类型为空);//“object”而不是“null”
通常,不要使用null以避免混淆。
标准库方法返回undefined,而不是null
let a = [10];
console.log(a[1]) //=> undefined
console.log(a.find(value => value === 5)) //=> undefined
我经常在人们的代码中看到,某个变量最初未定义,然后赋值给某个值,然后通过设置为null来清除。这是不一致的,最好回到undefined。
尽管如此,如果框架使用null,或者对于json序列化,null是有意义的。
当您在javascript中声明一个变量时,它被赋值为undefined。这意味着变量是未被修改的,可以在将来分配任何值。这也意味着您不知道该变量在声明时将保持的值。
现在可以显式地将变量赋值为null。这意味着变量没有任何值。例如,有些人没有中间名。因此,在这种情况下,最好将值null赋给person对象的中间名变量。
现在假设某人正在访问person对象的中间名变量,并且该变量的值未定义。他不知道开发人员是否忘记初始化这个变量,或者它是否没有任何值。如果它的值为null,那么用户可以很容易地推断middlename没有任何值,并且它不是一个未触及的变量。