话说上一篇介绍了JavaScript故事版的身世之谜。看官你估计也明白JavaScript出生之时,就不曾托于重任。布兰登-艾奇估计也没料到今天的JavaScript变得如此重要。要否则,当年他也不会如此惜墨,居然只搞了一个"Var"声明就海纳百川。固然不是说如此惜墨有什么重大缺陷,人家内部搞个类型推断那也是牛B轰轰的。话说微软那个c#也有个神奇的Var,有抄袭布兰登-艾奇Idea的嫌疑!javascript
布兰登-艾奇如此惜墨,搞了个Var就算了,连我们后端鞋同最熟悉的那些数据类型也省了。后端鞋同们一看这JavaScript,怎么连声明都简单得只有一个Var,我们那帮熟悉的老友"int、float、double、char、long......"也消失了。同窗们难以接受,一开始就有点鄙视这看上去缺胳膊少腿的Javascript。因而乎,同窗们都不屑一顾,页面上的脚本就写得天马行空了,反正不ERROR就行。
java
本楼一番废话,不知道是不是道出了看官的心声。是的,JavaScript的变量系统被布兰登-艾奇这家伙简化了,专业上那叫“弱类型言语系统”。这玩儿是好是坏就很差定论了,当年原本就没打算让JavaScript干啥大活儿,简化设计也是时世所造。可是,鞋同们要想将JavaScript玩弄在手,那些if...else、do....while你能够鄙视,可是它的变量类型系统仍是得要认真take a look!这也是本楼此番博文要一块儿共同窗习的。 面试
好!我们的标题叫《JavaScript神同样的变量系统》,我们就看看怎么个神法! c#
少而精的变量类型 后端
鞋同们应该都有求职经历,当年楼主就被这样一个问题问倒了。“你说你js写得还能够,那请问js里面都有什么数据类型?”。瞬间哑火,固然你能够说js那简单的言语,不须要知道都有什么数据类型,也能够写得满屏纷飞。可是细节决定成败,楼主说不出,那offer可能也飞了。那javaScript到底有哪些数据类型,一句话: 数组
数值类型只有一个(number),字符串(string)少不了,真假(boolean)那也得留着,空值(null)加未定义(undefined)也是经常使用的,数组(Array)那确定也跑不了,还有一个上帝object,外加一个让人头痛的function。 闭包
是的,就是上面这句话,或许可让你拿到offer。可是上面这句话还得压缩来讲,啥意思呢?意思是上面的话是展开的,那为什么不先说压缩的,而后再说展开的呢?那是楼主我为了让你记忆深入一些了。准确来讲,上面说的类型都是我们编码用到的具体类型,可是对于JavaScript的类型系统类型,真实的类型以下: 学习
上帝Object包含了null、object(如var obj={.....})、array;number类型将全部一切数值类型的值都囊括其中;Boolean、String那几乎是任何言语都不缺乏的;function、undefined是JavaScript特有的;且看以下代码: 编码
var myVar=null; console.log("myVar is "+myVar+" typeof="+typeof(myVar) );//结果:myVar is null typeof=object var myVar5={name:"k"}; console.log("myVar5 is "+myVar5+" typeof="+typeof(myVar5));//结果:myVar5 is [object Object] typeof=object var myVar6=[1,2,3,100]; console.log("myVar6 is "+myVar6+" typeof="+typeof(myVar6));//结果:myVar6 is 1,2,3,100 typeof=object var myVar1; console.log("myVar1 is "+myVar1+" typeof="+typeof(myVar1));//结果:myVar1 is undefined typeof=undefined var myVar2="kevin"; console.log("myVar2 is "+myVar2+" typeof="+typeof(myVar2));//结果:myVar2 is kevin typeof=string var myVar3=100.000000001; console.log("myVar3 is "+myVar3+" typeof="+typeof(myVar3));//结果:myVar3 is 100.000000001 typeof=number var myVar4=true; console.log("myVar4 is "+myVar4+" typeof="+typeof(myVar4));//结果:myVar4 is true typeof=boolean var myVar7=function(){} console.log("myVar7 is "+myVar7+" typeof="+typeof(myVar7));//myVar7 is function (){} typeof=function
看了上面的类型定义,你或许已经找到了规律,无非是将数值类型统一为number了,再加了两个Javascript特有的function、undefined。是的,规律就是这样的,记住这句话面试spa
就没问题了。可是知道了具体的类型还不行,还得知道哪些是引用类型,哪些是值类型。这个也没啥好说的,记住就行:object、function、array是引用类型,其余均为值类型!
神同样的var声明
说这个var像神同样,是由于大部分状况下var定义的变量,你想它是啥就是啥;但绝非全部状况都是,好比"var res='123'+456;",你千万别告诉我这是579!var除了你想啥就是啥的强大功能,它还有一个做用是用于JavaScript运行前的词法解析,能够起到那个听起来很高深的“变量提高”做用。因为涉及到JavaScript的词法解析,故本博文先不做说明,敬请关注后面的词法分析。
琢磨不透的做用域
做用域!做用域!做用域!难以捉摸的事情说三遍!这玩儿常常拿听起来很牛逼的闭包来作列子。说到底,做用域也是跟Javascript的词法解析密不可分。文章要是写得太长,看着也困,同时也因为词法解析的重要性,故本博文先不做说明,敬请关注后面的词法分析。
看完这博文,你要是记住JavaScript的变量类型,那我们的目的也达到了。