当前位置: 首页 > Web前端 > vue.js

JavaScript中关于null的一切

时间:2023-03-31 20:17:27 vue.js

作者:DmitriPavluti译者:前端小智来源:dmitripavlutin有梦想,有干货,微信搜索【大招走向世界】关注这位还在洗碗的洗碗智慧清晨。本文已收录到GitHubhttps://github.com/qq449245884/xiaozhi,里面有完整的测试站点、资料和我的一线厂商访谈系列文章。JavaScript有两种类型:基本类型(字符串、布尔值、符号)和对象。对象是复杂的数据结构,JS中最简单的对象就是一个普通的对象:一组键和相关联的值:在这种情况下,JS提供了一个特殊的值null——表示对象不存在。letmyObject=null在本文中,我们将学习有关JavaScript中null的所有知识:它的含义、如何检测它、null和undefined之间的区别,以及为什么使用null会使代码维护变得困难。1、null的概念JS规范对null的信息进行了解释:值null指的是指定对象的值没有被设置,它是JS的基本类型之一,在布尔运算中被认为是falsy。例如,函数greetObject()创建对象,但如果无法创建对象,也可以返回null:functiongreetObject(who){if(!who){returnnull;}return{message:`Hello,${who}!`};}greetObject('Eric');//=>{消息:'你好,埃里克!'}greetObject();//=>null但是,当调用函数greetObject()时不带参数,函数返回null。返回null是合理的,因为who参数没有值。2.如何检查null检查null值的一个好方法是使用严格的相等运算符:constmissingObject=null;constexistingObject={消息:'你好!'};缺少对象===null;//=>trueexistingObject===null;//=>falmissingObject===null计算结果为true,因为missingObject变量包含空值。如果变量包含非空值(例如对象),则表达式existObject===null的计算结果为false。2.1null是假值null和false、0、''、undefined、NaN都是假值。如果在条件语句中遇到falsy值,那么JS会将falsy值强制为false。布尔值(空);//=>falseif(null){console.log('nullistruthy')}else{console.log('nullisfalsy')}2.2typeofnulltypeof值运算符确定值的类型。例如,typeof15是“number”,typeof{prop:'Value'}的计算结果是“object”。有趣的是typeofnull的结果是什么;//=>'object'为什么是'object',拼写错误nullbeingobject是早期JS实现中的一个错误。要检测空值,请使用typeof运算符。如前所述,使用严格相等运算符myVar===null。如果我们想使用typeof运算符来检查一个变量是否是一个对象,我们还需要排除空值:functionisObject(object){returntypeofobject==='object'&&object!==null;}isObject({prop:'价值'});//=>trueisObject(15);//=>falseisObject(null);//=>错误3。nullnull的陷阱往往在我们认为变量是对象的时候意外出现。然后,如果从null中提取属性,JS会抛出错误。再次使用greetObject()函数,并尝试从返回的对象访问消息属性:letwho='';greetObject(谁).message;//throws"TypeError:greetObject()isnull"因为who变量是一个空字符串,所以函数返回null。从null访问message属性时,将引发TypeError错误。可以通过使用带有空合并的可选链接来处理空值:letwho=''greetObject(who)?.message??'你好,陌生人!'//=>'你好,陌生人!'4.null的替代方案当无法构造对象时返回null是常见的做法,但这种方法有缺点。只需检查执行堆栈中的空值。尽量避免返回null:返回默认对象而不是null抛出错误而不是返回null回到开始返回问候对象的greetObject()函数。当缺少参数时,可以返回默认对象而不是null:functiongreetObject(who){if(!who){who='Stranger';}return{message:`Hello,${who}!`};}greetObject('Eric');//=>{消息:'你好,埃里克!'}greetObject();//=>{消息:'你好,陌生人!'}或抛出错误:functiongreetObject(who){if(!who){thrownewError('"who"argumentismissing');}return{message:`Hello,${who}!`};}greetObject('Eric');//=>{消息:'你好,埃里克!'}greetObject();//=>throwsanerror这两个方法可以避免使用null。5.nullvsundefinedundefined是未初始化的变量或对象属性的值,undefined是未初始化的变量或对象属性的值。让我的变量;我的变量;//=>undefinednull和undefined之间的主要区别在于null表示缺少对象,而undefined表示未初始化状态。严格相等运算符===区分null和undefined:null===undefined//=>false而双重相等运算符==认为null和undefined相等null==undefined//=>true我使用双重相等运算符来检查变量是否为null或未定义:functionisEmpty(value){returnvalue==null;}isEmpty(42);//=>falseisEmpty({prop:'Value'});//=>falseisEmpty(null);//=>trueisEmpty(undefined);//=>真6。总结Null是JavaScript中的一个特殊值,代表一个缺失的对象,严格相等运算符判断一个变量是否为空:variable===null。typoef运算符可用于确定变量的类型(数字、字符串、布尔值)。但是,如果为null,则typeof会产生误导:typeofnull的计算结果为“object”。null和undefined在某种程度上是等价的,但是null表示没有对象,而undefined是未初始化状态。原文:https://dmitripavlutin.com/ja...代码部署后可能出现的bug无法实时获知。之后为了解决这些bug,花费了大量的时间在日志调试上。顺便在这里推荐一个不错的BUG监控工具Fundebug。交流有梦想,有干货,微信搜索【大千世界】关注这位凌晨还在洗碗的洗碗智者。本文GitHubhttps://github.com/qq44924588...已收录,有完整的测试站点、资料和我的一线厂商访谈系列文章。