关于js undefined的探索

作者: 不知道取个什么昵称不如娶个媳妇 | 来源:发表于2018-08-25 10:42 被阅读32次

    写在最前面:


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

    举个栗子

    代码 结果

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

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

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

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

    代码 结果

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

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

    代码

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

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

    代码 结果

    看吧,我不骗你们;

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

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

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

    代码

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

    null;

    undefined;

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

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

    和第三个相反true;

    ok!请注意:放大招了:

    结果

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

    原因是这个样子的:

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

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

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

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

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

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


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

    不要在意这些细节了!

    关于对象中undefined:

    我们可以先建立一个对象

    对象

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

    =。=

    没毛病,undefined很正常,

    没毛病

    接着来,

    =。=

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

    (;´д`)ゞ

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

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

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

    真让人摸不着头。。。

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

    ps:这里使用in运算符

    in 代码 结果

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

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

    js的对象hasOwnProperty()属性;

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

    代码 结果

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

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

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

    相关文章

      网友评论

        本文标题:关于js undefined的探索

        本文链接:https://www.haomeiwen.com/subject/mspwiftx.html