undefined出现的形式?undefined代表什么意思?
总的来说null和undefined都代表空,主要区别在于undefined表示尚未初始化的变量的值,而null表示该变量有意缺少对象指向。
undefined
这个变量从根本上就没有定义
隐藏式 空值
null
这个值虽然定义了,但它并未指向任何内存中的对象
声明式 空值
MDN 中给出的定义
null
值null是一个字面量,不像undefined,它不是全局对象的一个属性。null是表示缺少的标识,指示变量未指向任何对象。把null作为尚未创建的对象,也许更好理解。在 API 中,null常在返回类型应是一个对象,但没有关联的值的地方使用。
undefined
undefined是全局对象的一个属性。也就是说,它是全局作用域的一个变量。undefined的最初值就是原始数据类型undefined。
一张神奇的图片
接下来我们看一张比较经典的图片,该图来自 stackoverflow 的回答,本人没有找到准确的出处。
表现形式
在更深入理解null和undefined的区别前,我们首先要知道null和undefined在JS中有什么不同的表现形式,用以方便我们更好的理解null和undefined的区别。
typeof
typeof null // 'object'
typeof undefined // 'undefined'
Object.prototype.toString.call
typeof null // '[object Null]'
typeof undefined // '[object Undefined]'
== 与 ===
null == undefined // true
null === undefined // false
!!null === !!undefined // true
Object.getPrototypeOf(Object.prototype)
JavaScript中第一个对象的原型指向null。
Object.getPrototypeOf(Object.prototype) // null
+ 运算 与 Number()
let a = undefined + 1 // NaN
let b = null + 1 // 1
Number(undefined) // NaN
Number(null) // 0
JSON
JSON.stringify({a: undefined}) // '{}'
JSON.stringify({b: null}) // '{b: null}'
JSON.stringify({a: undefined, b: null}) // '{b: null}'
let undefiend = 'test'
function test(n) {
let undefined = 'test'
return n === undefined
}
test() // false
test(undefined) // false
test('test') // ture
let undefined = 'test' // Uncaught SyntaxError: Identifier 'undefined' has already been declared
深入探索
为什么 typeof null 是 object?
typeof null输出为'object'其实是一个底层的错误,但直到现阶段都无法被修复。
原因是,在JavaScript初始版本中,值以32位存储。前3位表示数据类型的标记,其余位则是值。
对于所有的对象,它的前3位都以000作为类型标记位。在JavaScript早期版本中,null被认为是一个特殊的值,用来对应C中的空指针。但JavaScript中没有C中的指针,所以null意味着什么都没有或者void并以全0(32个)表示。
因此每当JavaScript读取null时,它前端的3位将它视为对象类型,这也是为什么typeof null返回'object'的原因。
为什么 Object.prototype.toString.call(null) 输出 '[object Null]'
toString()是Object的原型方法,调用该方法,默认返回当前对象的[[Class]]。这是一个内部属性,其格式为[object Xxx],其中Xxx就是对象的类型。
JavaScript 万物皆对象,为什么 xxx.toString() 不能返回变量类型?
这是因为 各个类中重写了toString的方法,因此需要调用Object中的toString方法,必须使用toString.call()的方式调用。
对于Object对象,直接调用toString()就能返回'[object Object]'。而对于其他对象,则需要通过call / apply来调用才能返回正确的类型信息。
为什么 == 和 === 对比会出现 true 和 false ?
很多文章说:undefined的布尔值是false,null的布尔值也是false,所以它们在比较时都转化为了false,所以undefined == null。
实际上并不是这样的。
ECMA在11.9.3章节中明确告诉我们:
Ifxisnullandyisundefined, returntrue.
Ifxisundefinedandyisnull, returntrue.
这是JavaScript底层的内容了,至于更深入的内容,如果有兴趣可以扒一扒JavaScript的源码。
为什么null + 1和undefined + 1表现不同?
这涉及到JavaScript中的隐式类型转换,在执行加法运算前,隐士类型转换会尝试将表达式中的变量转换为number类型。如:'1' + 1会得到结果11。
null转化为number时,会转换成0
undefined转换为number时,会转换为NaN
至于为什么执行如此的转换方式,我猜测是JavaScript早期的一个糟糕设计。
从语言学的角度来看:
null意味着一个明确的没有指向的空值,而undefined则意味着一个未知的值。
在某种程度上,0意味着数字空值。
这虽然看起来有些牵强,但是我在这一阶段能所最能想到的可能了。
为什么 JSON.stringify 会将值为 undefined 的内容删除?
其实这条没有很好的解释方式,JSON会将undefined对应的 key 删除,这是JSON自身的转换原则。
在undefined的情况下,有无该条数据是没有区别的,因为他们在表现形式上并无不同:
let obj1 = { a: undefined }
let obj2 = {}
console.log(obj1.a) // undefined
console.log(obj2.a) // undefined
但需要注意的是,你可能在调用接口时,需要对JSON格式的数据中的undefied进行特殊处理。
为什么 let undefiend = 'test' 可以覆盖掉 JavaScript 自身的 undefined?
JavaScript对于undefined的限制方式为全局创建了一个只读的undefined,但是并没有彻底禁止局部undefined变量的定义。
据说在JavaScript高版本禁止了该操作,但我没有准确的依据。
请在任何时候,都不要进行undefined变量的覆盖,就算是你的JSON转换将undefined转换为''。也不要通过该操作进行,这将是及其危险的行为。
总结
关于使用 undefined 还是 null
这是一条公说公有理婆说婆有理的争议内容。
本人更倾向于使用null,因为这是显示定义空值的方式。我并不能给出准确的理由。
但关于使用undefined我有一条建议:
如果你需要使用undefined定义空值,请不要采取以下两种方式:
let a;
let a = undefined;
进而采取下面这种方式显式声明undefined:
let a = void 0;
关键词: undefined是什么意思 null和undefined对比如何 undefined出现的形式 undefined代表什么意思
相关阅读
-
12-06
-
12-06
-
12-06
-
12-06
-
12-06
-
12-06
推荐阅读
-
undefined出现的形式?undefined代表什么意思?
简单区分总的来说null和undefined都代表空,主要区别在于undefined表示尚未初始化的变量的值,而null表示该变量有意缺少对象指向。undefine更多
2022-12-06 09:04:01
-
上海华生电器怎么样?华生电器属于几线品牌?
近日通报2021年电风扇等重点产品专项监督抽查情况。抽查20批次电风扇产品,5批次不合格。涉及的不合格项目共计4个,标志和说明、稳定性和机更多
2022-12-06 08:53:06
-
业绩疲弱,何小鹏思过
业绩疲弱,何小鹏思过小鹏汽车的2022年第三季度财报会,犹如一场何小鹏的深刻检讨会。“坦诚地说,在实现长期战略目标的道路上更多
2022-12-06 08:40:02
-
【全球报资讯】电动车续航即将迎来重大突破! 国
电动车续航即将迎来重大突破!国轩高科半固态电池预计年底实现装车近日,国轩高科在回答投资者提问时表示:该公司半固态电池匹配客户需求,预更多
2022-12-06 08:41:24
-
东风标致408X路试谍照曝光 或将2023年上市
东风标致408X路试谍照曝光或将2023年上市近日,东风标致全新车型的路试谍照首次曝光。新车或为东风标致即将推出的全新全球车型408X。作为一款更多
2022-12-06 08:24:10
-
复古风设计/或搭插混动力 魏牌首款轿车谍照曝光
复古风设计 或搭插混动力魏牌首款轿车谍照曝光日前,网易汽车从相关渠道获取到了一组魏牌首款轿车的路试谍照。外观方面,结合谍照与此前曝光的更多
2022-12-06 08:37:41
-
每日速读!本田中国11月销量同比下滑超4成
本田中国11月销量同比下滑超4成12月5日,本田中国发布11月份销量数据。11月本田中国终端汽车销量为78126辆,同比下滑42 8%。1-11月本田中更多
2022-12-06 08:22:16
-
okwap是什么牌子的手机?okwap什么档次?
okwap手机,也就是国产手机品牌英华达手机,它旗下有三个系列的手机产品,分别是流行时髦的A系列、科技创新i系列、系统整合的S系列。那么,更多
2022-12-06 08:45:26
时尚热图
热门标签
华为手机显示电量在哪...
halfsun是什么牌子?ha...
koobee酷比手机好用吗...
月兔空调质量可靠吗?...
华为手机怎么查看加密...
dram灯一直亮开机没画...
gt740显卡对主板有要...
苹果电脑重装mac系统...
空调制热开辅热还是制...
微软商店里好用的软件...
《原神》2.2版本大更...
LOL:他们几个很强,...
LOL手游值得练习的6个...
王者荣耀:孙行者上架...
雅典娜18888金币英雄...
《英雄联盟手游》正式...
《堡垒之夜》被苹果拉...
mazon Games宣布他们...
PowerA主题手柄:续航...
银行股终于有了起色 ...
-
今日必看
-
精彩话题
-
资讯播报
- undefined出现的形式?undefined代表什么意思?
- 上海华生电器怎么样?华生电器属于几线品牌?
- okwap是什么牌子的手机?okwap什么档次?
- 【全球报资讯】电动车续航即将迎来重大突破! 国轩高科半固态电池预计年底实现装车
- 业绩疲弱,何小鹏思过
- 复古风设计/或搭插混动力 魏牌首款轿车谍照曝光
- 东风标致408X路试谍照曝光 或将2023年上市
- 每日速读!本田中国11月销量同比下滑超4成
- 三大运营商股价创年内新高,新发展模型下价值如何重估?
- 新能源车11月走出独立热销行情,车企薅“国补”最后的羊毛
- 京东方A:目前没有调整2022年柔性OLED年度出货目标,全年预计出货8000万片
- 世界今亮点!宝马“Gen6”电池发布,续航里程、充电速度提升30%
- 全球聚焦:逆势涨价,北汽元宝取消最低配,全系上涨2000元
- 每日视点!规划产能约为今年动力电池装车总量的10倍,产能过剩即将到来?
- 每日资讯:蔚来智能系统,像“树”一样成长
- 焦点热文:大众集团即将推出新软件战略,自动驾驶软件领导权移交大众商用车
- 快消息!博格华纳收购Drivetek
- Mapbox推出新的位置智能平台更新
- 环球速递!硬核科技显实力,中国移动数智防疫解决方案助力广州高效抗疫
- 焦点简讯:Semi还不是特斯拉的“王炸”
- 快看:拓普集团空气悬架系统新增7个项目定点
- 全球看点:大陆集团电子悬架系统及市场趋势展望
- 全球新资讯:现代IONIQ 5 N最新假想图 将于2023年亮相
- 世界速读:MG MULAN推出限时保价政策
- 焦点简讯:移动5G助力东方特钢持续提升“含智量”
- 上海:三家基础电信企业已建成5G基站6.8万个
- 环球短讯!分享数据治理思考与实践 中国移动在联合国互联网治理论坛(IGF)上有力发声
- 【世界新要闻】三星电子任命首位女总裁,监督移动业务
- 每日快讯!荣获2021版C-NCAP首个MPV五星认证,风行游艇重新树立行业安全标杆
- 需求不给力?特斯拉上海工厂12月或减产20%
- 全球要闻:晶钻设计搭配优雅内饰!凯捷混动铂金版匠心独具,奢享旗舰格调
- 每日快报!除了零百加速性能,电动汽车们还能比什么?
- 环球快讯:或命名“ES100”,沃尔沃全新轿车渲染图曝光
- 华为手机显示电量在哪里设置?华为手机怎么电量校准?
- halfsun是什么牌子?halfsun蓝牙耳机怎么连?
- koobee酷比手机好用吗?酷比x6pro手机质量怎么样?
- 月兔空调质量可靠吗?月兔空调是哪里生产的?
- 每日焦点!盖世汽车受邀参加“学习二十大,网聚嘉能量”嘉定区网络代表人士访学活动
- 每日热门:国轩高科再获一块矿权,加快上游原材料端布局
- 资讯推荐:光束,静悄悄
- 华为手机怎么查看加密的照片?华为手机怎样加密照片?
- 苹果新专利:用VSMR传感器探测用户手势 可用于车载显示器等
- dram灯一直亮开机没画面怎么办?dram存储器是什么?
- gt740显卡对主板有要求吗?gt740m显卡设置是什么?
- 苹果电脑重装mac系统教程是什么?mac系统重装找不到磁盘怎么办?
- 微软商店里好用的软件有哪些?十大办公软件排行是什么?
- 空调制热开辅热还是制热?空调不制热的原因和处理方法是什么?
- 观热点:广东联通启动集约化监控外包服务集采,预算1619万
- 前富士康高管:越南和印度难以承接苹果高端机型制造
- 超威电池的寿命怎么样?超威电池和超威石墨烯哪个好?
- 塞班系统有什么用?塞班系统现在还做吗?
- 苹果手机买什么样的充电器好?苹果充电器突然不能充电怎么办?
- 【时快讯】11月销量向好,腾势的开局足够惊艳
- 世界要闻:发布全球品牌行动纲领 长城汽车召开海外经销商大会
- 高级飞行和低级飞行区别是什么?飞行模式的利弊有哪些?
- 电脑突然黑屏了但是电脑还在运行怎么回事?电脑明明开着机却黑屏怎么解决?
- 怎么打开usb调试模式?usb调试模式如何强制打开?
- 富士通扫描仪扫描卡顿怎么办?富士通7140扫描仪教程是什么?
- 热管的结构及作用是什么?热管的组成及工作原理是什么?
- 10月全球动力电池装机量环比下降12% 比亚迪再超LG夺得亚军
- 耳机控制板接线的方法是什么?苹果3.5耳机接线步骤是什么?
- 华为的谷歌play服务怎么启用?华为手机打不开谷歌浏览器怎么办?
- 【天天报资讯】11月新能源车企交付榜:埃安大幅领跑,小鹏迎来拐点?
- 环球新消息丨首台整车下线,比亚迪济南工厂正式投产
- 安全25亿倍,三星有望在2025年推出三指屏下指纹解锁方案
- 三星小米等厂商均受影响,谷歌披露威胁数百万安卓设备的高危漏洞
- 每日资讯:《腾讯数字孪生云白皮书》发布 形成“技术+应用”双轮驱动体系
- 欧盟新法案尝试为飞机提供5G网络
- 当前滚动:中国信通院“全球网测”APP正式上线
- 小鹏的新活法
- 世界观点:可厨房可卧室,奔驰发布 EQT Marco Polo概念车
- 俄罗斯汽车的崩塌与重建
- 疑似改款特斯拉 Model 3 曝光,车头车尾设有伪装
- 护航“神十四”回家 有我们在请放心
- 爱立信:5G增长快于以往任何一代移动通信
- E周看点丨恒大汽车裁员10%;夏珩辞任小鹏汽车执行董事
- 焦点快播:“野兽”Semi新鲜出炉交付,还有特斯拉V4充电桩
- 当前简讯:产品力世界杯 | 以小博大!微型车组等待新王者?
- 【新要闻】霍尼韦尔、Nexceris合作传感器解决方案 探测电动汽车电池起火预兆
- 观焦点:12月新车大盘点!比亚迪又要出爆款?
- 海洋变牧场 数智进田园 联通奏响数字乡村协奏曲
- 可享4000元保险补贴 特斯拉推出12月购车限时福利
- 全球头条:长安福特新人事:杨大勇接任长安福特执行副总裁
- 一张图表get新能源品牌“限时保价”政策
- 环球新资讯:MicroVision将收购Ibeo Automotive Systems部分资产 加速为汽车OEM提供解决方案
- 深圳联通携手中兴通讯率先完成5G mMTC功能和性能外场测试
- Velodyne Lidar推出Vella系列软件产品
- 每日速讯:宝马申请新专利 太阳能电池板可通过外玻璃板为汽车充电
- 全球最新:中国研究人员开发出新型形状记忆电流收集器 可阻止电池热失控
- 天天播报:宝马获EV悬架系统新专利 将崎岖道路转化为可用动力
- 天天观焦点:恒大汽车:裁员10%,25%员工停薪留职
- 2022年江苏省新型数据中心典型案例名单:电信占一半,联通缺席
- 报告:2021年我国未成年网民1.91亿 未成年人互联网普及率96.8%
- 三星电子12月将成立一个新的全球研究机构 主要分析半导体市场
- 当前最新:广东省已建成5G基站超21万 数量全国第一
- 每日聚焦:新机器学习模型可精确预测10种聚合物的特性
- JAIST用微生物合成电解质添加剂 以稳定锂离子电池
- 全球报道:满载续航超800公里 首批特斯拉Semi电动卡车交付
- 热门看点:新方法可实时监测电池中的电解质演变过程
- 焦点讯息:11月新势力销量:冷暖,自知