关于js undefined的探索

写在最前面:

作为一个还未毕业的大三狗,前端应该是最让人觉得热情澎湃,又让人心生绝望的一个方向,尽管现在前端真的很火,但是,但是,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,这个是默认的;

举个栗子

《关于js undefined的探索》 代码
《关于js undefined的探索》 结果

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

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

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

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

《关于js undefined的探索》 代码

《关于js undefined的探索》 结果

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

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

《关于js undefined的探索》 代码

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

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

《关于js undefined的探索》 代码
《关于js undefined的探索》 结果

看吧,我不骗你们;

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

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

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

《关于js undefined的探索》 代码

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

null;

undefined;

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

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

和第三个相反true;

ok!请注意:放大招了:

《关于js undefined的探索》 结果

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

原因是这个样子的:

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

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

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

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

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

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

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

不要在意这些细节了!

关于对象中undefined:

我们可以先建立一个对象

《关于js undefined的探索》 对象

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

《关于js undefined的探索》 =。=

没毛病,undefined很正常,

《关于js undefined的探索》 没毛病

接着来,

《关于js undefined的探索》 =。=

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

《关于js undefined的探索》 (;´д`)ゞ

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

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

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

真让人摸不着头。。。

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

ps:这里使用in运算符

《关于js undefined的探索》 in

《关于js undefined的探索》 代码
《关于js undefined的探索》 结果

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

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

js的对象hasOwnProperty()属性;

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

《关于js undefined的探索》 代码

《关于js undefined的探索》 结果

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

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

ok,第一期就到这,如果喜欢请支持下,如果觉得不行,请转发下,让更多的人知道,然后来给我指出错误,哈哈哈哈,喜滋滋!!!

点赞