当前位置: 首页 > Web前端 > JavaScript

关于 JavaScript 中 null 的一切

时间:2023-03-27 15:33:03 JavaScript

JavaScript结构中关于null的一切。最简单的JavaScript对象是普通对象——键和关联值的集合letmyObject={name:'EricCartman'};但是也有很多情况下无法创建对象。在这种情况下,JavaScript提供了一个特殊的值null-这意味着缺少对象letmyObject=null;在这篇文章中,你将了解到JavaScript中关于null的一切:它的含义,如何检测它,null和undefined的区别,以及为什么大量使用null会导致代码维护困难等。1.null的概念null在JavaScript规范中是这样描述的。Null是一种基本类型,这意味着它不会有意包含任何对象值。variableorfunctionreturned),那么该位置应该有一个对象,但是由于某些原因,没有创建对象例如函数greetObject()创建了对象,但是当不能创建对象时也可以返回nullcreated:functiongreetObject(who){if(!who){returnnull;}return{message:`Hello,${who}!`};}greetObject('Eric');//=>{消息:'你好,埃里克!'}greetObject();//=>null当在上面的函数中传递一个字符串参数时,正如预期的那样,该函数返回一个对象{message:'Hello,Eric!'但是,当函数中没有传递任何参数时,函数返回null。返回null是合理的,因为who参数没有值,所以无法创建greeting对象1.1null的一个更恰当的类比考虑null的一个更恰当的类比,你可以把一个变量想象成一个盒子。就像变量可以容纳物体一样,盒子可以容纳茶壶等物品。但是一旦你收到一个盒子,打开它,什么也没有!有人弄错了,给了你一个空盒子。该框不包含任何内容,或者换句话说,它包含一个空值2.如何检测null检查是否为null的一个好方法是使用严格相等运算符constmissingObject=null;constexistingObject={消息:'你好!'};缺少对象===null;//=>trueexistingObject===null;//=>falmissingObject===null计算结果为true,因为missingObject变量包含空值。如果变量包含非空值,比如对象,existingObject===null表达式的结果为false2.1null为假值null和false,0,",undefined,NaN都是假值。如果在条件语句中遇到它们,那么JavaScript会将它们强制转换为falseBoolean(null);//=>falseif(null){console.log('nullistruthy');}else{console.log('nullisfalsy');//logs'nullisfalsy'}2.2typeofnulltypeofvalue类型运算符可以判断value的类型,比如15的类型是number,typeof{prop:'Value'}等于object。有意思的是,空值类型Whatturnsouttobetypeofnull;//=>'object'缺失的对象类型如何判断为object?结果typoefnullasobject是早期JavaScript实现中的一个错误。不要使用typeof运算符检查空值。前面说过,使用严格相等运算符myVar===null如果要用typeof判断一个变量是否是对象,必须排除null的情况functionisObject(object){returntypeofobject==='object'&&object!==null;}isObject({prop:'Value'});//=>trueisObject(15);//=>falseisObject(null);//=>错误3。nullnull的陷阱通常会在期望使用对象的情况下意外出现。然后,如果您尝试从null中提取属性,JavaScript会抛出错误让我们再次使用greetObject()函数并尝试从返回的对象中访问message属性letwho='';greetObject(who).message;//throws"TypeError:greetObject()isnull"因为who变量是一个空字符串,函数返回null。从null访问message属性时,将抛出TypeError错误。您可以使用可选的链接运算符who='';greetObject(who)?.message来处理nulllet??'你好,陌生人!';//=>'你好,陌生人!'或使用下一节中描述的两个选项。4.null的替代方法当你不能构造一个对象时很容易返回null。但是这种做法也有缺点一旦null出现在执行栈中,你总是要检查它我们尽量避免返回null:返回默认对象而不是null抛出错误而不是返回null让我们回忆一下greetObject()函数返回问候对象而不是返回空函数greetObject(who){if(!who){who='Stranger';}return{message:`Hello,${who}!`};}greetObject('Eric');//=>{消息:'你好,埃里克!'}greetObject();//=>{消息:'你好,陌生人!'}或抛出一个错误}return{message:`Hello,${who}!`};}greetObject('Eric');//=>{消息:'你好,埃里克!'}greetObject();//=>throwsanerror这些做法可以让你完全避免处理空值5。null与undefinedUndefined是未初始化的变量或对象属性的值。例如,如果您声明一个变量而没有分配Initial值,那么访问该变量的结果是undefinedletmyVariable;myVariable;//=>undefinednull和undefined的主要区别是null表示一个丢失的对象,而undefined表示一个未初始化的状态//=>false而松散相等运算符==认为null和undefined相等null==undefined;//=>true我用松散相等运算符检查变量是否为空或未定义functionisEmpty(value){returnvalue==null;}isEmpty(42);//=>falseisEmpty({prop:'Value'});//=>falseisEmpty(null);//=>trueisEmpty(undefined);//=>真6。总结null在JavaScript中是一个特殊的值,表示一个缺失的对象判断变量是否为空的严格相等运算符:variable===nulltypepoef运算符用于确定变量的类型(数字、字符串、布尔值)。但是,typeof在null的情况下会产生误导:typeofnull结果在objectnull和undefined上有些等价,但null表示缺少对象,而undefined表示未初始化状态避免返回null或将变量转换为设置为null。因为这样做会导致空值膨胀,需要进行空值验证。相反,最好尝试使用具有默认属性的对象,甚至抛出错误Whatmethodwouldyouusetocheckfornull?