当前位置: 首页 > news >正文

JavaScript神一样的变量系统

  话说上一篇介绍了JavaScript故事版的身世之谜。看官你估计也明白JavaScript出生之时,就未曾托于重任。布兰登-艾奇估计也没料到今天的JavaScript变得如此重要。要不然,当年他也不会如此惜墨,竟然只搞了一个"Var"声明就海纳百川。当然不是说如此惜墨有什么重大缺陷,人家内部搞个类型推断那也是牛B轰轰的。话说微软那个c#也有个神奇的Var,有抄袭布兰登-艾奇Idea的嫌疑!

  布兰登-艾奇如此惜墨,搞了个Var就算了,连咱们后端鞋同最熟悉的那些数据类型也省了。后端鞋同们一看这JavaScript,怎么连声明都简单得只有一个Var,咱们那帮熟悉的老友"int、float、double、char、long......"也消失了。同学们难以接受,一开始就有点鄙视这看上去缺胳膊少腿的Javascript。于是乎,同学们都不屑一顾,页面上的脚本就写得天马行空了,反正不ERROR就行。

  本楼一番废话,不知道是否是道出了看官的心声。是的,JavaScript的变量系统被布兰登-艾奇这家伙简化了,专业上那叫“弱类型言语系统”。这玩儿是好是坏就不好定论了,当年本来就没打算让JavaScript干啥大活儿,简化设计也是时世所造。但是,鞋同们要想将JavaScript玩弄在手,那些if...else、do....while你可以鄙视,但是它的变量类型系统还是得要认真take a look!这也是本楼此番博文要一起共同学习的。

  好!咱们的标题叫《JavaScript神一样的变量系统》,咱们就看看怎么个神法!

少而精的变量类型

  鞋同们应该都有求职经历,当年楼主就被这样一个问题问倒了。“你说你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。是的,规律就是这样的,记住这句话面试

就没问题了。但是知道了具体的类型还不行,还得知道哪些是引用类型,哪些是值类型。这个也没啥好说的,记住就行:object、function、array是引用类型,其他均为值类型!


神一样的var声明

  说这个var像神一样,是因为大部分情况下var定义的变量,你想它是啥就是啥;但绝非所有情况都是,比如"var res='123'+456;",你千万别告诉我这是579!var除了你想啥就是啥的强大功能,它还有一个作用是用于JavaScript运行前的词法解析,可以起到那个听起来很高深的“变量提升”作用。由于涉及到JavaScript的词法解析,故本博文先不作说明,敬请关注后面的词法分析。


琢磨不透的作用域

  作用域!作用域!作用域!难以捉摸的事情说三遍!这玩儿经常拿听起来很牛逼的闭包来做列子。说到底,作用域也是跟Javascript的词法解析密不可分。文章要是写得太长,看着也困,同时也由于词法解析的重要性,故本博文先不作说明,敬请关注后面的词法分析。


  看完这博文,你要是记住JavaScript的变量类型,那咱们的目的也达到了。

 

转载于:https://www.cnblogs.com/kevinJhuang/p/6111706.html

相关文章:

  • esayui
  • 我在使用eclipse配置Tomcat服务器的时候发现,默认情况下Tocmat把我们部署的项目放在了workspaces下面,而不是像Myeclipse默认的那样放在tomcat的安装路径下。...
  • 去除字符串中的emoji字符
  • Thinkphp框架 -- 短信接口验证码
  • pip 使用国内源安装第三方库
  • vue.js入门(3)——组件通信
  • Java线程专栏文章汇总(转)
  • 快速破解哈希密文findmyhash
  • JDBC与Hibernate中SQL语句参数设置的顺序问题
  • 数据库备份通用脚本
  • ehcache memcache redis 三大缓存
  • 二十六、Jcreator使用初步
  • 访问修饰符和构造函数
  • YUV Player
  • 盒子模型-怪异模式和标准模式
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • (三)从jvm层面了解线程的启动和停止
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 2017 前端面试准备 - 收藏集 - 掘金
  • angular学习第一篇-----环境搭建
  • es6(二):字符串的扩展
  • magento 货币换算
  • 阿里云购买磁盘后挂载
  • 使用agvtool更改app version/build
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #mysql 8.0 踩坑日记
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (九)One-Wire总线-DS18B20
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • ../depcomp: line 571: exec: g++: not found
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .net流程开发平台的一些难点(1)
  • .Net小白的大学四年,内含面经
  • .NET中使用Protobuffer 实现序列化和反序列化
  • ??javascript里的变量问题
  • [383] 赎金信 js
  • [Android]RecyclerView添加HeaderView出现宽度问题
  • [android学习笔记]学习jni编程
  • [Angular 基础] - 表单:响应式表单
  • [c++] 单例模式 + cyberrt TimingWheel 单例分析
  • [CareerCup] 12.3 Test Move Method in a Chess Game 测试象棋游戏中的移动方法
  • [CSAWQual 2019]Web_Unagi ---不会编程的崽
  • [C语言]——C语言常见概念(1)
  • [Deepin 15] 编译安装 MySQL-5.6.35
  • [Excel VBA]单元格区域引用方式的小结
  • [HNCTF 2022 WEEK2]easy_include 文件包含遇上nginx
  • [HTML]Web前端开发技术12(HTML5、CSS3、JavaScript )——喵喵画网页