继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

关于js undefined的探索

慕码人8056858
关注TA
已关注
手记 1247
粉丝 350
获赞 1323

作为一个还未毕业的大三狗,前端应该是最让人觉得热情澎湃,又让人心生绝望的一个方向,尽管现在前端真的很火,但是,但是,Javascript是真的很难,索性已经入坑,那就背上行囊,继续我们的填坑之路吧!


说明:原文来自于David ShariffJavaScript’s Undefined Explored》----- 转载请说明出处。



关于JavaScript变量


变量在声明的时候是一个undefined的东西,而当变量在被赋值以后就变了,就变成了不同的家伙。在JavaScript中我们所知道的数据类型大概分为以下两大类:

一,基本类型:

    Number --------->数字

    String ------------>字符串

    Boolean---------->布尔类型

    undefined-------->未定义类型

    null ---------------->空类型(空对象)

    Symbol()--------->符号(ps:这是在ES6中新增加的类型)

二,应用类型:

    Object------------->对象(我的象棋有两对象;找对象,不存在的,new不就好了吗?)


好的我们今天就只是说说undefined:

    关于undefined,我觉得还行吧,毕竟undefined就只有一个值-----undefined,人家超级专一好不好。实际上,在变量只是声明但没有被负值,呸,赋值的时候,你定义的变量,它的值就是undefined,直到你给这个变量赋了一个值。

    当然,在你定义的函数执行完毕,但是你又没有给定任何返回值的时候就会返回undefined,这个是默认的;

举个栗子


webp

代码

webp

结果

可以看到我们定义了一个Hai()函数,并把它赋给了fun然后调用传参。

结果显而易见,第一个console.log()毫无压力的打印出了我们想要的10,而第二个打印出了undefined。

我说的是对的(不接受无故埋人,接受建议和批评和指正和很多很多。)

我们来验证一哈关于这个变量未赋值时候是不是undefined;


webp

代码


webp

结果

这里我就不废话了,代码说明一切;

桥的麻袋,有个大问题,在ECMA 5之前,下面这个是可以玩的,也就是说老浏览器是可以这么干的,也就是说这里得注意的是JavaScript兼容问题


webp

代码

不要慌问题不大,扶我起来,我还能写代码

然鹅,ECMA 5之后,这个骚操作就不行了,来来来,直接上代码:


webp

代码

webp

结果

看吧,我不骗你们;

好的说明一下,ECMA 5开始,不允许重新定义未定义(undefined);

基本类型中有一个null,现在我们就来看看null和undefined之间的那点关系,刚才还说undefined类型专一,现在我突然发现这个家伙的值undefined有点不正经,废话不多说,直接来证明:

ps:尽可猜测一下,这些结果都是啥!


webp

代码

恩,没见过结果之前我们可以大胆的想象一下这段console.log()的结果;

null;

undefined;

第三个就有点难,严格等于比较,要求数据类型和值都必须一样,好的false;

这个,值应该不相等吧,好的false;

和第三个相反true;

ok!请注意:放大招了:


webp

结果

意不意外,惊不惊喜!!!

原因是这个样子的:

null在强制类型转换(也就是隐式类型转换)的时候,被判断成了false;

undefined在强制类型转换(也就是隐式类型转换)的时候,也被判断成了false;

所以,你们懂得,这原来不是undefined要找小三,这是强的,强的,强。。。

所以在 == 时候由于无关数据类型,他们就相等了;

而在 === 时候由于关乎数据类型,他们就false了;

在 !==时候也不难理解,由于数据类型不一样,所以就ture了(这里请注意,true哦)!


我也不知道为啥要来个分割线,可能我觉得上面的内容太乱了,成吧,就不要在意这些细节了,下面我们说说,对象,里面的undefined,来吧!告诉我你们有没有对象,有没有,好吧!

不要在意这些细节了!

关于对象中undefined:

我们可以先建立一个对象


webp

对象

然后,我们开始访问了啊;奇怪为什么要访问对象。。。。


webp

=。=

没毛病,undefined很正常,


webp

没毛病

接着来,


webp

=。=

woc,Σ("a   Σ("a   Σ("a    (;´д`)ゞ

webp

(;´д`)ゞ

html:14行    类型错误   没有 maidIsBeautiful() 这个函数?(;´д`)ゞ

咱们访问maidIsBeautiful这个属性时候没有任何毛病,是可以访问的,

但是当maidIsBeautiful()是个函数的时候,就有问题了,报错了,报错了,凉凉;

真让人摸不着头。。。

为什么呢?代码说明一切:

ps:这里使用in运算符


webp

in


webp

代码

webp

结果

false,表示不存在,也就是说maidIsBeautiful这个属性没有在对象里面,本来嘛,obj这个对象里面也就啥都没有。

如果你不信,来我们再来一次,保证姿势不重复;

js的对象hasOwnProperty()属性;

hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性


webp

代码


webp

结果

repeat : false,表示不存在,也就是说maidIsBeautiful这个属性没有在对象里面,本来嘛,obj这个对象里面也就啥都没有。

注意:通常,如果要测试是否存在属性,请使用in / hasOwnProperty,如果要检查属性/变量的值,请使用typeof。



作者:不知道取个什么昵称不如娶个媳妇
链接:https://www.jianshu.com/p/450c61f2303c


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP