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的变量类型,那咱们的目的也达到了。
JavaScript神一样的变量系统的更多相关文章
- JavaScript获取客户端计算机硬件及系统等信息的方法
JavaScript获取客户端计算机硬件及系统等信息的方法 JavaScript 获取客户端计算机硬件及系统信息 通过WMI来实现获取客户端计算机硬件及系统信息: function getSysInf ...
- JavaScript获取后台C#变量以及调用后台方法
http://www.educity.cn/develop/495493.html 有时需要在JavaScript中获取后台变量的值,来判断JavaScript的执行逻辑,或者需要调用C#后台方法获取 ...
- 原生 javascript 学习之 js变量
1.变量的命名 方法的命名(驼峰命名法) 全部小写 : 单词与单词之间全部下划线 (my_namespace) 大小写混合 : 第一个单词首字母小写其他单词首字母大写. 规则 首字符 英文字母或下划线 ...
- JavaScript的作用域和变量对象
变量对象 先来说说什么是变量对象.变量对象中又存储了什么东西吧. JavaScript中的运行环境包含全局运行环境和函数运行环境这两种,每进入到一个运行环境都会创建一个变量对象,这个对象中记录了在当前 ...
- javascript基础语法备忘录-变量和数据类型
//javascript基础语法备忘录-变量和数据类型 // 定义变量使用var关键字 后面跟变量名,不要使用eval 和arguments为变量名 var message = "hi&qu ...
- MySQL的变量--系统变量、状态变量
MySQL的变量分为以下两种:1)系统变量:配置MySQL服务器的运行环境,可以用show variables查看2)状态变量:监控MySQL服务器的运行状态,可以用show status查看 一.系 ...
- 护卫神·云查杀系统V4.0-安全检测部分
感谢使用护卫神·云查杀系统,该软件专门查杀网页木马,完全免费,欢迎大家使用. 护卫神·云查杀系统 下载地址:http://down.huweishen.com/free/HwsKill.zip ...
- nginx的变量系统
本来想写一下nginx的脚本引擎的,但是看起来实在是有点庞大,一时间还不知道该从哪里写比较好.就先写一下他的变量系统吧,这是脚本引擎非常重要的组成部分. 首先为了表述清楚先规定几个术语吧 内置变量:n ...
- 【javascript】详解变量,值,类型和宿主对象
前言 我眼中的<javascript高级程序设计> 和<你不知道的javascript>是这样的:如果<javascript高级程序设计>是本教科书的话, < ...
随机推荐
- 20160203.CCPP体系详解(0013天)
程序片段(01):数组.c+02.数组初始化语法.c 内容概要:数组 ///01.数组.c #include <stdio.h> #include <stdlib.h> //0 ...
- HDU 4662 MU Puzzle 2013 Multi-University Training Contest 6
现在有一个字符串"MI",这个字符串可以遵循以下规则进行转换: 1.Mx 可以转换成 Mxx ,即 M 之后的所有字符全部复制一遍(MUI –> MUIUI) 2.III 可 ...
- click和onclick的区别
onclick是绑定事件,click本身是方法作用是触发onclick事件,只要执行了元素的click()方法,下面有个示例,大家可以看看 Html代码 ? 1 2 3 4 5 6 7 8 9 1 ...
- 使用crs_setperm修改RAC资源的所有者及权限
Oracle RAC 集群中,对于各种资源的管理,也存在所有者与权限的问题.crs_getperm与crs_setperm则是这样的一对命令,主要用于查看与修改集群中resource的owner,gr ...
- Oracle 11g RAC oc4j/gsd Offline
Oracle 11g RAC中,发现oc4j以及gsd服务都处于offline状态,这是Oracle 11g RAC默认情形.即便如此,并不影响数据库的使用,因为 oc4j 是用于WLM 的一个资源, ...
- 手动编译Spring4.2源码,以及把源码导入myEclipse中
前提条件,先在本地配置好JDK1.8, 安装好Git 执行下面命令: 1,双击Git Bash, 进入源码存放路径 cd E:\Foler 2,git clone git@github.com:spr ...
- IDEA14 Ultimate Edition注册码
分享几个license: (1) key:IDEA value:61156-YRN2M-5MNCN-NZ8D2-7B4EW-U12L4 (2) key:huangweivalue:97493-G3A4 ...
- iOS学习笔记之Category
iOS学习笔记之Category 写在前面 Category是类别(也称为类目或范畴),使用Category,程序员可以为任何已有的类添加方法.使用类别可以对框架提供的类(无法获取源码,不能直接修改) ...
- 数往知来 AJAX Ajax增删改查<十九>
=================================================客户端================================================ ...
- C语言 百人拉百灯问题
题目: 有100人,编号从1到100; 另有100盏灯,编号也从 1到100. 现要求每人去拉能被自己编号整除的所有电灯, 例如编号为1者应把所有的灯都拉一遍, 编号为2者应把所有编号为偶数的灯都拉一 ...