首页 > 其他分享 >为什么我们应该避免使用undefined?

为什么我们应该避免使用undefined?

时间:2023-08-23 15:36:06浏览次数:40  
标签:为什么 undefined 可读性 避免 使用 全局 变量 属性

在 JavaScript 中,undefined 是一个特殊的值和全局变量,用于表示一个未定义的变量或属性。当一个变量被声明但未被赋予初始值时,它的值就是 undefined。类似地,如果你访问一个对象的不存在的属性,也会得到 undefined。

为什么我们应该避免使用undefined?

可读性差

首先,使用 undefined 可能会导致代码可读性变差,访问未定义的变量,不存在的属性会得到undefined,没有返回值的函数也会得到undefined,缺省的参数也会得到undefined。当程序出现undefined时,他的含义是模糊的。通常推荐使用更具描述性的方式来表达变量或属性的状态,而不是直接使用 undefined。

正确做法:

  • 使用 null 表示明确的空值。
  • 使用默认参数值,避免传递 undefined 作为参数。
  • 在对象中使用属性默认值,而不是依赖于属性的初始值为 undefined。
  • 提供有意义的变量名,以更好地反映变量的用途和状态。

潜在的 Bug

注意,当我们直接使用undefined时,我们其实是在访问一个全局属性undefined,这个对象会返回undefined的原始值。

undefined是全局对象的一个属性。也就是说,它是全局作用域的一个变量。undefined的最初值就是原始数据类型undefined。

因此,在js中,undefined并不是一个保留字。他可能会被作为变量赋值,在作用域中覆盖全局属性的值。这存在潜在的 Bug,容易被意外地重新赋值,造成程序错误。

如果非要使用undefined,不要直接使用undefined,而是使用void运算符返回undefined的原始值。

var a = undefined; // ×
var b = void 0; // √

总结

总的来说,我们应该将 undefined 视为一个可能引发混淆、不稳定和安全问题的潜在陷阱。通过遵循最佳实践,明确初始化变量,使用明确的判断和避免不必要的使用,我们可以更好地管理代码的可读性、稳定性和安全性。

标签:为什么,undefined,可读性,避免,使用,全局,变量,属性
From: https://www.cnblogs.com/orzmiku/p/17651756.html

相关文章

  • 线性代数为什么是计算机专业的基础课程
    线性代数在机器学习中比较低阶的应用是矩阵运算,比如softmax分类器y^=σ(WTx+b)\hat{\mathbf{y}}=\sigma(W^T\mathbf{x}+\mathbf{b}),在这里矩阵形式使得书写、计算更方便,也能帮助理解模型(将矩阵看作是一种变换);高阶一点的应用在无监督学习中,可以参考奇异值分解(SVD)等矩阵分解方......
  • 为什么穷人孩子成功不了?
    为什么穷人孩子成功不了?北柯随笔  616人赞同了该回答圣人的书,是拿来做人的,拿来办事是毫无用处!这句话熟悉吧?胡部堂说的嘛! 穷人能给孩子的教育,基本都属于做人的大道理,但缺乏处世做事的能力教育!包括努力学习上好的学校找份好工作,这其实也算不上什么能力教育......
  • 记录--post为什么会发送两次请求?
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助在前段时间的一次面试中,被问到了一个如标题这样的问题。要想好好地去回答这个问题,这里牵扯到的知识点也是比较多的。那么接下来这篇文章我们就一点一点开始引出这个问题。同源策略在浏览器中,内容是很开放的,任何......
  • 先作个记录,后面再研究为什么
    TFileServiceFunction=recordstrictprivatetypeTFunctionNameRec=recordconstLoadFile='LoadFile';SaveFile='SaveFile';GetAllFileNames='GetAllFileNames';en......
  • 为什么学生时代外语学的好的几乎都是女生,而翻译大师绝大多数是男的呢?
    https://www.zhihu.com/question/65526610作者:TaylorSmith链接:https://www.zhihu.com/question/65526610/answer/239446011来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。作为一名外语专业的男生,可能我更有感触吧!因为翻译是纯文科的东西,需要一......
  • print eval exec repr str 转义 避免转义 转义结果
    printevalexecreprstrhttps://blog.51cto.com/u_16055028/7074038https://blog.51cto.com/u_16055028/7073380https://blog.51cto.com/u_16055028/6170218https://blog.51cto.com/u_16055028/6270476......
  • 面试官:Feign 第一次调用为什么会很慢?大部分人都答不上来!
    作者:Lxlxxx链接:https://juejin.cn/post/7249624466150408250前言首先要了解Feign是如何进行远程调用的,这里面包括,注册中心、负载均衡、FeignClient之间的关系,微服务通过不论是eureka、nacos也好注册到服务端,Feign是靠Ribbon做负载的,而Ribbon需要拿到注册中心的服务列表,将服务......
  • 请解释电竞游戏CS中的闪光弹为什么会让电脑屏幕出现闪光的效果,具体是怎样的原理请推测
    在电竞游戏《反恐精英》(Counter-Strike,简称CS)中,闪光弹是一种战术道具,用于干扰敌人的视觉。它会造成电脑屏幕出现闪光效果的原因是因为游戏引擎采用了特定的视觉效果技术来模拟真实世界中的闪光效果,让玩家在游戏中感受到更真实的环境。以下是可能用于模拟闪光效果的原理和推测:......
  • 为什么使用HashMap的键存的是自定义的键时需要重写hashcode和equals方法?
    当hashMap的键存的是自定义的键时需要重写对象的hashcode和equals方法存入的是对象时,应该hashMapd的键不能存储的值不能相同,如果重写方法的hashcode()方法,他会默认调用object类的hashcode方法,但是object的hashcode方法时地址值计算出来的hash值,并不是内容,这个时候就需要重......
  • 为什么选择模块化机柜?
     模块化机柜是一种使用模块化设计的机柜,它的特点就是可以灵活组合和扩展,方便用户根据实际需求进行定制。 模块化机柜具有以下特点:可定制性:模块化机柜可以根据用户的具体需求和空间限制,进行自由组合和定制。用户可以根据自己的需要选择不同的模块组合,以适应不同的应用场景。......