作为一个还未毕业的大三狗,前端应该是最让人觉得热情澎湃,又让人心生绝望的一个方向,尽管现在前端真的很火,但是,但是,Javascript是真的很难,索性已经入坑,那就背上行囊,继续我们的填坑之路吧!
说明:原文来自于David Shariff 《JavaScript’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。
作者:不知道取个什么昵称不如娶个媳妇
链接:https://www.jianshu.com/p/450c61f2303c