美文网首页JavaScript
JavaScript 数据类型和变量

JavaScript 数据类型和变量

作者: Rising_life | 来源:发表于2019-03-07 16:17 被阅读11次

    JavaScript 数据类型

    字符串、数字、数组、布尔、对象、Null、Undefined

    Number (数字)

    JavaScript不区分整数和浮点数,统一用Number表示。

    合法的Number类型

    123;    // 整数123

    0.456;    // 浮点数0.456

    1.2345e3;    // 科学计数法表示1.2345x1000,等同于1234.5

    -99;    // 负数

    NaN;    // NaN表示Not a Number,当无法计算结果时用NaN表示

    Infinity;    // Infinity表示无限大,当数值超过了JavaScript的Number所能表示的最大值时,就表示为Infinity

    Number可以直接做四则运算,规则和数学一致:

    1 + 2; // 3

    ( 1 + 2 ) * 5 / 2; // 7.5

    2 / 0; // Infinity

    0 / 0; // NaN

    10 % 3; // 1

    10.5 % 3; // 1.5

    注意 % 是求余运算。


    String (字符串)

    字符串是以单引号 ( ' ) 或双引号 ( " ) 括起来的任意文本,单引号或双引号只是一种表示方式,不是字符串的一部分。

    转义字符  \

    输出 单引号 或 双引号 可以用转义字符 \ 来标识

    转义字符 \ 可以转义很多字符,比如 \n 表示换行,\t 表示制表符,字符 \ 本身也要转义,所以 \\ 表示的字符就是 \。

    ASCII字符

    ASCII字符可以以 \x## 形式的十六进制表示,例如:

    '\x41';    //完全等同于'A'

    还可以用 \u#### 表示一个Unicode字符:

    '\u4e2d\u6587';    //完全等同于'中文'

    多行字符串

    由于多行字符串用 \n 写起来比较费事,所以最新的ES6标准新增了一种多行字符串的表示方法,用反引号 ` ... ` 表示:

    模板字符串

    多个字符串可以用 + 号连接起来

    如果有很多变量需要连接,用+号就比较麻烦。ES6新增了一种模板字符串,表示方法和上面的多行字符串一样,但是它会自动替换字符串中的变量:

    注意:拼接时要用反引号括起来,否则 ${... } 会以字符串的形式输出

    操作字符串

    获取字符串的长度:(注意:空格也是字符串的一部分)

    要获取字符串某个指定位置的字符,使用类似Array的下标操作,索引号从0开始:

    字符串是不可变的,如果对字符串的某个索引赋值,不会有任何错误,但是,也没有任何效果:

    字符串常用方法

    JavaScript为字符串提供了一些常用方法,注意,调用这些方法本身不会改变原有字符串的内容,而是返回一个新字符串:

    toUpperCase

    toUpperCase()把一个字符串全部变为大写:

    toLowerCase

    toLowerCase() 把一个字符串全部变为小写:

    indexOf

    indexOf()会搜索指定字符串出现的位置:

    substring

    substring()返回指定索引区间的子串:


    Array  (数组)

    数组是一组按顺序排列的集合,集合的每个值称为元素。

    JavaScript的数组可以包括任意数据类型。并通过索引来访问每个元素。

    数组用[]表示,元素之间用,分隔。

    [ 1,3.14,'Hello',null,true,undefined ];

    另一种创建数组的方法是通过Array()函数实现:

    newArray(1,2,3);    // 创建了数组[1, 2, 3]

    然而,出于代码的可读性考虑,强烈建议直接使用[]。

    要取得Array的长度,直接访问length属性:

    请注意,直接给Array的length赋一个新的值会导致Array大小的变化:

    Array可以通过索引把对应的元素修改为新的值,因此,对Array的索引进行赋值会直接修改这个Array:

    如果通过索引赋值时,索引超过了范围,同样会引起Array大小的变化:

    大多数其他编程语言不允许直接改变数组的大小,越界访问索引会报错。然而,JavaScript的Array却不会有任何错误。在编写代码时,不建议直接修改Array的大小,访问索引时要确保索引不会越界。

    indexOf

    与String类似,Array也可以通过indexOf()来搜索一个指定的元素的位置:

    注意:数字 30 和 字符串 '30' 是不同的元素

    slice

    slice()就是对应String的substring()版本,它截取Array的部分元素,然后返回一个新的Array:

    注意:到slice()的起止参数包括开始索引,不包括结束索引。

    如果不给slice()传递任何参数,它就会从头到尾截取所有元素。利用这一点,我们可以很容易地复制一个Array:

    push 和 pop

    push()向Array的末尾添加若干元素,pop()则把Array的最后一个元素删除掉:

    unshift 和 shift

    如果要往Array的头部添加若干元素,使用unshift()方法,shift()方法则把Array的第一个元素删掉:

    sort

    sort()可以对当前Array进行排序,它会直接修改当前Array的元素位置,直接调用时,按照默认顺序排序:

    想要按照指定的顺序排序需要创建函数。

    reverse

    reverse()把整个Array的元素给反转:

    splice

    splice()方法是修改Array的“万能方法”,它可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素:

    concat

    concat()方法把当前的Array和另一个Array连接起来,并返回一个新的Array:

    注意:concat()方法并没有修改当前Array,而是返回了一个新的Array。

    concat()方法可以接收任意个元素和Array,并且自动把Array拆开,然后全部添加到新的Array里:

    join

    join()方法是一个非常实用的方法,它把当前Array的每个元素都用指定的字符串连接起来,然后返回连接后的字符串:

    多维数组

    如果数组的某个元素又是一个Array,则可以形成多维数组

    var arr = [[1,2,3], [400,500,600],'-'];

    上述Array包含3个元素,其中头两个元素本身也是Array。

    数组的元素可以通过索引来访问。请注意,索引的起始值为0:

    var arr = [1,2,3.14,'Hello',null,true];

    arr[0]; // 返回索引为0的元素,即1

    arr[5]; // 返回索引为5的元素,即true

    arr[6]; // 索引超出了范围,返回undefined


    Boolean (布尔) 

    布尔值和布尔代数的表示完全一致,一个布尔值只有true、false两种值,要么是true,要么是false,可以直接用true、false表示布尔值,也可以通过布尔运算计算出来:

    true;//这是一个true值false;//这是一个false值2>1;//这是一个true值2>=3;//这是一个false值

    &&运算是与运算,只有所有都为true,&&运算结果才是true:

    true&&true;//这个&&语句计算结果为truetrue&&false;//这个&&语句计算结果为falsefalse&&true&&false;//这个&&语句计算结果为false

    ||运算是或运算,只要其中有一个为true,||运算结果就是true:

    false||false;//这个||语句计算结果为falsetrue||false;//这个||语句计算结果为truefalse||true||false;//这个||语句计算结果为true

    !运算是非运算,它是一个单目运算符,把true变成false,false变成true:

    !true;//结果为false!false;//结果为true! (2>5);//结果为true

    布尔值经常用在条件判断中,比如:

    varage =15;if(age >=18) {    alert('adult');}else{    alert('teenager');}


    Null 和 Undefined

    null表示一个“空”的值,它和0以及空字符串''不同,0是一个数值,''表示长度为0的字符串,而null表示“空”。

    在其他语言中,也有类似JavaScript的null的表示,例如Java也用null,Swift用nil,Python用None表示。但是,在JavaScript中,还有一个和null类似的undefined,它表示“未定义”。

    JavaScript的设计者希望用null表示一个空的值,而undefined表示值未定义。事实证明,这并没有什么卵用,区分两者的意义不大。大多数情况下,我们都应该用null。undefined仅仅在判断函数参数是否传递的情况下有用。


    Object (对象) 

    JavaScript的对象是一种无序的集合数据类型,它由若干键值对组成。

    JavaScript的对象用于描述现实世界中的某个对象:

    var person = {    

    name: 'Bob',    

    age: 20,   

     tags:  ['js','web','mobile'],    

    city: 'Beijing',   

     hasCar: true,    

    zipcode: null

    }; 

    JavaScript对象的键都是字符串类型,值可以是任意数据类型。上述person对象一共定义了6个键值对,其中每个键又称为对象的属性,例如,person的name属性为'Bob',zipcode属性为null。

    要获取一个对象的属性,我们用对象变量.属性名的方式:

    person.name;    //'Bob'

    person.zipcode;    //null

    JavaScript用一个{...}表示一个对象,键值对以xxx: xxx形式申明,用,隔开。注意,最后一个键值对不需要在末尾加,,如果加了,有的浏览器(如低版本的IE)将报错。

    访问属性是通过 . 操作符完成的,但这要求属性名必须是一个有效的变量名。如果属性名包含特殊字符,就必须用''括起来.

    属性名middle-school不是一个有效的变量,就需要用 ' ' 括起来。访问这个属性也无法使用 . 操作符,必须用['xxx']来访问

    也可以用 xiaoming['name'] 来访问 xiaoming 的 name 属性,不过 xiaoming.name 的写法更简洁。我们在编写JavaScript代码的时候,属性名尽量使用标准的变量名,这样就可以直接通过 object.prop 的形式访问一个属性了。

    实际上JavaScript对象的所有属性都是字符串,不过属性对应的值可以是任意数据类型。

    访问不存在的属性不报错,而是返回undefined:

    由于JavaScript的对象是动态类型,你可以自由地给一个对象添加或删除属性:

    如果我们要检测xiaoming是否拥有某一属性,可以用in操作符:

    如果in判断一个属性存在,这个属性不一定是xiaoming的,它可能是xiaoming继承得到的,因为toString定义在object对象中,而所有对象最终都会在原型链上指向object,所以xiaoming也拥有toString属性。

    hasOwnProperty()方法:判断一个属性是否是xiaoming自身拥有的,而不是继承得到的。


    变量

    变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。

    变量在JavaScript中就是用一个变量名表示,变量名是大小写英文、数字、$和_的组合,且不能用数字开头。变量名也不能是JavaScript的关键字,如if、while等。申明一个变量用var语句,比如:

    vara;// 申明了变量a,此时a的值为undefinedvar$b=1;// 申明了变量$b,同时给$b赋值,此时$b的值为1vars_007 ='007';// s_007是一个字符串varAnswer =true;// Answer是一个布尔值truevart =null;// t的值是null

    变量名也可以用中文,但是,请不要给自己找麻烦。

    在JavaScript中,使用等号=对变量进行赋值。可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,但是要注意只能用var申明一次,例如:

    vara =123;// a的值是整数123a ='ABC';// a变为字符串

    这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。例如Java是静态语言,赋值语句如下:

    inta =123;// a是整数类型变量,类型用int申明a ="ABC";// 错误:不能把字符串赋给整型变量

    和静态语言相比,动态语言更灵活,就是这个原因。

    请不要把赋值语句的等号等同于数学的等号。比如下面的代码:

    varx =10;x = x +2;

    如果从数学上理解x = x + 2那无论如何是不成立的,在程序中,赋值语句先计算右侧的表达式x + 2,得到结果12,再赋给变量x。由于x之前的值是10,重新赋值后,x的值变成12。

    要显示变量的内容,可以用console.log(x),打开Chrome的控制台就可以看到结果。

    // 打印变量x

     Run

    使用console.log()代替alert()的好处是可以避免弹出烦人的对话框。

    相关文章

      网友评论

        本文标题:JavaScript 数据类型和变量

        本文链接:https://www.haomeiwen.com/subject/cxccpqtx.html