入门 - 变量类型

  • 作者:KK

  • 发表日期:2016.2.2


变量是有不同类型的,我这里先只说常见的类型,有以下:

  • 字符串类型(string),比如var name = '小明';这时候name变量就是一个字符串类型变量,因为它的值是就是一个字符串,用单引号包住

    其实字符串也可以用双引号包住,比如var name = "小明";

  • 数字类型(number),比如var age = 18;这时候age变量就是一个数字类型变量,因为它的值是一个数字,不是一个引号引住的字符串

    但是var age = '18';或者var age = "18";这就是字符串,只是这个字符的内容是18,但它并不是一个数字

  • 布尔类型(boolean),布尔类型,只有两种值,分别是true(表示真)和false(表示假),比如var ok = true;var ok = false;这时候ok变量就是一个布尔类型

先介绍这三种类型吧,你可以设想成字符串类型是用来做文字显示的,数字类型用来做加减乘除等数学计算的,布尔类型是用来判断是 或 不是 的


字符串类型(string)

我们在计算机设备上到处能看到各种标签/提示文字,英文单词这些,对于程序来说,这些都叫做"字符串",由一个个字符串起来的东西,也就是我们通俗所说的"文字"

字符串要用单引号或者双引号包住,比如

var name1 = '字符串1';
var name2 = "字符串2";

我比较推荐使用单引号,而我接触的更多程序员都是用单引号的

至少我觉得输入双引号挺麻烦的,因为要按住shift键再按引号键啊

  • 字符串拼接

    字符串是可以拼接在一起的,比如

    var name = '小明';
    var do = '出去吃饭';
    var statement = name + do;
    alert(statement);
    

    就会看到"小明出去吃饭"这个句子

    因为上面由name和do两个变量用+号拼接起来了,并将拼接的结果传给了statement这个新声明的变量

  • 转义字符

    很多编程语言都有转义字符这个知识点并且几乎相同,JS里的字符转义是这样的:

    var name = 'n\no';
    alert(name);
    

    弹窗会显示n在上面,o在下面,而不是看到n\no,因为\n是一个转义字符,这个字符在JS的字符串里是一个换行符号,所以n后面被换了一行,o就去了第2行

    所以记住了,要把你的文字分2行显示,就要插入一个\n哦!

    • 引号的转义

      转义字符的特征就是前面有个\号,比如\t这是一个tab符(平时我们按缩进的那个,制表符),那么'小\t明'这个JS字符串就会在"小"字后面做了缩进,让"明"字在缩进之后才显示,于是它们的距离就是比较远的

      转义字符的知识也是经常用得到的,所以这个要了解,比如你要在字符串中显示单引号,可以用双引号包住"I'm"

      但是如果里面既有单引号又有双引号呢,如果你写成"I'm say:"how are you""

      这时候代码解析器会以为"I'm say:"是一个字符串,然后就会出错了,因为后面的how are you""它根本不知道怎么运行这些命令,所以就会出错

      所以引号也可以用转义来解决,"I'm say:\"how are you\"",这样就可以完整地显示I'm say:"how are you"这个句子了

    • \号的转义

      如果字符串里面有\号那也是要转义的,写法就是在\号后面再加一个\号,写成\\这样

      因为如果你只打一个\号的话就会把\号后面的字符转义掉,比如'aa\bb'结果就是aabb,因为\b会变成字母b,所以你必须写成'aa\\bb',使2个\号变成1个\号

      这里临时换一下话题,为什么上面\b会变成字母b,但前面\n会变成换行呢?因为转符号()后面跟字母n在代码解释器来看是有特殊意思的,所以代码解析器按照规定将\n解析成换行,而\号后面跟字母b是没有意义的,所以它原样地解析出这个字母,得到了字母b

      至于具体有哪些字母跟在\号后面是有特殊意思的,你只要知道\n,\r,\t,\\,\'\"就行,其实不是字母跟在\号后面,而是字符,包括了符号哦 在JS里一般你只要记住\n,\t,\\,\'\"这5个转义字符就行了,未来接触到其它字符串里带有\号的话直接搜索"JS字符转义"会有好多文章解说全部字符转义的,但你可能几乎都用不上


数字类型(number)

数字类型不需要像字符串一样用引号引住,只要直接写数字就可以,比如

var age = 18;
alert(age);

var type = typeof(age);
alert(type);

但是字符串中包含纯数字时注意和数字也不是同一类型

var age = 18;
var type = typeof(age);
alert(type); //number类型,数字

var age2 = '18';
var type2 = typeof(age2);
alert(type2); //string类型,字符串

布尔类型(boolean)

布尔类型只有两种值,分别是truefalse,比如var a = true;那么这个变量就是布尔类型的变量

布尔类型的作用也是很大的,它表示"真"和"假",通俗地说就是"是"和"不是"的意思


获取变量的类型名称

我们怎么知道变量是么类型呢?这就需要使用typeof这个命令了!看下面的代码:

var name = '小明';
var type = typeof(name);
alert(type);

会弹出string(就是字符串类型的英文名称)

上面的代码声明了个字符串name,值是"小明",然后将这个name变量传给typeof命令

typeof命令对这个变量的类型进行了确认,然后将确认的结果传给了type变量

最后通过alert命令将type这个结果弹窗提示,你就会看到string这个提示,说明type的值是string

而看顶上我说的常见类型,字符串类型的英文表达就是string这个单词,所以说明typeof测试到name的类型是字符串(string)


修改变量的类型

JS是一种编程语言,而且又是一种脚本编程语言,它有一个弱类型的特征,什么是弱类型呢,就是变量的类型不用声明,也可以随意改变.

至于什么是变量的类型不用声明,我就不解释了,这里说说随意改变,例子:

var name = '小明';
name = 111;
var type = typeof(name);
alert(type);

name = '小东';
type = typeof(name);
alert(type);

name = '111';
type = typeof(name);
alert(type);

第1次会提示number,因为虽然开头name的值是字符串"小明",但紧接着在第2行就赋值为数字111了

后来又赋值为字符串"小东",于是第2次弹窗会提示string

而第3次弹窗却提示string,为什么呢?----原因就是第3次赋值时虽然也是赋111,但注意这个111被单引号引住了,所以它是一个字符串,只是字符里面是3个1,然而它不是数学上的111

反正你赋值的时候那个值是字符串,那么变量就成了字符串类型,而赋的是数字,那么就会是数字类型

一般情况下我们不要随意去修改变量的类型,如果它开头就是字符串,那么最好一直让它赋予字符串值


最后还要告诉你两个常见的变量类型

  • 无类型(null)

    虽然布尔类型只有true和false两个值,但是"无类型"这种更夸张,它只有一个值,它就是null,它表示"无"的意思

    以后你想让一个变量的值变成无的话,就var xx = null;就行了


  • 未定义类型(undefined)

    这个类型和无类型一样,也是只有一个值,就是undefined

    一个内存变量声明后不设置值,那么它就是未定义内存值的,比如

    var a; //只是定义,没有值
    alert(a); //会提示 undefined ,表示你没有定义这个变量的值(不是没有定义变量,而是没有定义值)
    

    但要注意一个事情,undefined是一个类型,但以下代码则不同

    变量a是一个字符串,字符串的内容叫undefined而已

    但变量b没有初始化值,它才是真正的undefined

    var a = 'undefined',b;
    alert(a); //提示undefined
    alert(b); //也是提示undefined
    
    //通过typeof得到变量类型名称看看
    var atype = typeof(a),
      btype = typeof(b);
    alert(atype); //提示string,说明它是一个字符串
    alert(btype); //提示undefined,说明它是一个undefined类型