资讯专栏INFORMATION COLUMN

Js基础——数据类型之Null和Undefined

jubincn / 332人阅读

摘要:原始值就是值本身不可改变,并且没有方法和属性。操作的时候看似操作原始值,其实是操作它的副本。代表空指针,就是没有对象存在,它不是全局对象的属性。这也是为什么需要替代它的原因。别忘了它们是不同的类型栗子参考资料

原始值就是值本身不可改变,并且没有方法和属性。操作的时候看似操作原始值,其实是操作它的副本。

Null 代表空指针,就是没有对象存在,它不是全局对象的属性。Null type对应唯一的字面量值null
Undefined 是全局对象的属性,它对应的唯一字面量值undefined
出现的情况:
1.变量声明没有赋值,变量的默认值是undefined
2.函数没有return,那么默认返回值是undefined
3.方法或是语句中没有赋值的变量,返回值是undefined
栗子?

不要把undefined作为变量名赋值,这样不仅会改变undefined的值,也会改变它的类型,这种情况的验证条件是不在全局环境中。undefined并不是关键字,所以避免这种情况

如果要判断一个值是不是undefined,有三种方式
1.直接比较值跟字面量undefined,这是比较要用全等===
2.就是用typeof 值跟类型’undefined’比较,这个可以在变量没有声明的情况下判断,而不会出错
3.用void 0代替undefined
栗子?

参考资料:https://developer.mozilla.org...
https://developer.mozilla.org...

扩展补充:
用void 0 代替undefined很好,为什么要代替undefined?为什么是void 0而不是其他的?
原因:1.undefined在全局环境下,已经是只读属性不可改变,但是在块作用域里还是可以改变的,因为它不是保留关键字,所以无法避免被重新赋值改变。这也是为什么需要替代它的原因。
2.因为void这个操作符,后面跟上任何的表达式或是语句,返回值都是undefined,而void 0是所有表达式中最短的一个,最完美的是void 0还不能重写
3.在这里我也终于明白了,当初想让链接跳转失效,在a标签这样写的用意,就是因为void(0)返回为undefined


  Click here to do nothing

4.也理解了在一些源码中,看到函数关键字function的前面会有void,它可以迫使函数声明变成函数表达式
栗子?

参考资料:https://developer.mozilla.org...
http://web.jobbole.com/86145/

Null vs Undefined
区别:null表示’空’的对象,转数值为0,undefined表示‘此处无意义’的原始值,转数值为NaN
undefined强调’不存在’,适用的场景:
比如:
1.不存在的初始值
2.不存在的对象属性,或是数组项
3.不存在的函数返回值
4.不存在的函数调用参数
栗子?

null的适用场景:
1.遍历一个不存在的dom节点
2.在页面销毁的时候,把不用的对象赋值为null

二者同为没有值的代表,在判断中都是false,但你要是想当然觉得它们相等,那就上当了。别忘了它们是不同的类型
栗子?

参考资料:https://yanhaijing.com/javasc...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/94477.html

相关文章

  • js基础变量类型计算

    摘要:值类型与引用类型值类型引用类型值类型引用类型类型转换字符串拼接运算符语句逻辑运算字符串拼接运算符语句逻辑运算符判断一个变量会被当做还是区分和会发生类型转换,没有类型转换。 1.数据类型 ECMAScript定义了6种数据类型,包括: 基本数据类型:Undefined、Null、Boolean、Number、String; 复杂数据类型:Object; 2.typeof操作符 typ...

    LiuRhoRamen 评论0 收藏0
  • javascript 基础类型转换

    摘要:类型转换和表示一个空对象。如果有其他类型想转换为或者类型,直接赋值就可以了。都能隐式的把数据类型转为类型。。。时间时间二数字类型转换为字符串默认是进制是一个对象类型,所以其他类型转化为通常都是。 前言 javaScript是一门可以自由进行数据类型转换的编程语言,类型转换是javaScript很重要的特色(坑点很多!!!),大家想以后写出更多严谨的代码(少出一些莫名其妙的Bug),还是...

    timger 评论0 收藏0
  • 前端面经整理JSCSS

    摘要:作为对象原型链的终点。调用函数时,应该提供的参数没有提供,该参数等于。它可以用于引用该函数的函数体内当前正在执行的函数。 一 JS 二 CSS 一 JS ==和===的区别 ===叫做严格运算符 ==叫做相等运算符严格运算符比较时不仅仅比较数值还要比较数据类型是否一样相等运算符在比较相同类型的数据时,与严格相等运算符完全一样。 在比较不同类型的数据时,相等运算符会先将数据进行类型转换,...

    stonezhu 评论0 收藏0
  • 前端面经整理JSCSS

    摘要:作为对象原型链的终点。调用函数时,应该提供的参数没有提供,该参数等于。它可以用于引用该函数的函数体内当前正在执行的函数。 一 JS 二 CSS 一 JS ==和===的区别 ===叫做严格运算符 ==叫做相等运算符严格运算符比较时不仅仅比较数值还要比较数据类型是否一样相等运算符在比较相同类型的数据时,与严格相等运算符完全一样。 在比较不同类型的数据时,相等运算符会先将数据进行类型转换,...

    lvzishen 评论0 收藏0
  • 我在那日界线奔跑JS---基础

    摘要:基本点数据结构本来制作的是脑图,思维导图,导出来不好上传,就这样吧基本的数据类型区别区别表示声明了一个变量,没有初始化的情况下输出该变量为以及未声明直接一个未声明的变量结果也为中的变量是弱类型的,中声明一个即使未赋值也会自动初始化为类型的并 基本点 数据结构 本来制作的是脑图,思维导图,导出来不好上传,就这样md+png吧 showImg(https://segmentfault.co...

    Profeel 评论0 收藏0

发表评论

0条评论

jubincn

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<