zoukankan      html  css  js  c++  java
  • JavaScript数据类型

    基本数据类型:

    字符串:String

    数字:Number

    布尔值:Boolean   true/fasle

    特殊数据类型:

    空对象:Null

    未定义:Undefined

    复合数据类型:

    对象:Object

    数组: Array

    一、      String字符串类型  

    String类型用于表示由零或多个16位Unicode字符组成的字符序列,即字符串。字符串可以由单引号(')或双引号(")表示。

    如:         var name = 'yan';
                var keMu = 'HTML5';
                console.log(name);   // yan   ,在控制台输出变量的值
                console.log(keMu);   // HTML5
     
    任何字符串的长度都可以通过访问其length属性取得
          alert(str1.length);        //输出5
     
    要把一个值转换为一个字符串有两种方式。第一种是使用几乎每个值都有的toString()方法。
    var age = 11;
        var ageAsString = age.toString();    //字符串"11"
        var found = true;
    var foundAsString = found.toString();    //字符串"true"
    数值、布尔值、对象和字符串值都有toString()方法。但null和undefined值没有这个方法。
     
    二、Number  数字类型
    数值类型包括了整数和浮点数,整数可以是十进制、十六进制和八进制数,十进制数由一串数字序列组成,它的第一个数字不能为0。如果第一个数字为0,则表示它是一个八进制数。如果0x,则表示它为一个十六进制数。 
    浮点数必须包含一个数字、一个小数点或“e”(或“E”)。浮点数例子如下:3.1415、 -3.1E12、0.1e12和2E-12。

    这种类型用来表示整数和浮点数值,还有一种特殊的数值,即NaN(非数值 Not a Number)。这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。例如,在其他编程语言中,任何数值除以0都会导致错误,从而停止代码执行。但在JavaScript中,任何数值除以0会返回NaN,因此不会影响其他代码的执行。

    NaN本身有两个非同寻常的特点。首先,任何涉及NaN的操作(例如NaN/10)都会返回NaN,这个特点在多步计算中有可能导致问题。其次,NaN与任何值都不相等,包括NaN本身。

    例如,下面的代码会返回false。

                 alert(NaN == NaN);    //false

    JavaScript中有一个isNaN()函数,这个函数接受一个参数,该参数可以使任何类型,而函数会帮我们确定这个参数是否“不是数值”。isNaN()在接收一个值之后,会尝试将这个值转换为数值。某些不是数值的值会直接转换为数值,例如字符串”10“或Boolean值。而任何不能被转换为数值的值都会导致这个函数返回true。例如:

         alert(isNaN(NaN));    //true

        alert(isNaN(10));    //false(10是一个数值)

        alert(isNaN("10"));    //false(可能被转换为数值10)

        alert(isNaN("blue"));    //true(不能被转换为数值)

        alert(isNaN(true));    //false(可能被转换为数值1)

      有3个函数可以把非数值转换为数值:Number()、parseInt()和parseFloat()。第一个函数,即转型函数Number()可以用于任何数据类型,而另外两个函数则专门用于把字符串转换成数值。这3个函数对于同样的输入会返回不同的结果。

      Number()函数的转换规则如下:

      如果是Boolean值,truefalse将分别被替换为10

      如果是数字值,只是简单的传入和返回

      如果是null值,返回0

      如果是undefined,返回NaN

      如果是字符串,遵循下列规则:

        如果字符串中只包含数字,则将其转换为十进制数值,即”1“会变成1,”123“会变成123,而”011“会变成11(前导的0被忽略)

        如果字符串中包含有效的浮点格式,如”1.1“,则将其转换为对应的浮点数(同样,也会忽略前导0)

        如果字符串中包含有效的十六进制格式,例如”0xf“,则将其转换为相同大小的十进制整数值

        如果字符串是空的,则将其转换为0

     如果字符串中包含除了上述格式之外的字符,则将其转换为NaN

      ● 如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法,然后再依次按照前面的规则转换返回的字符串值。

        var num1 = Number("Hello World");    //NaN

        var num2 = Number("");                //0

        var num3 = Number("000011");        //11

        var num4 = Number(true);            //1

      由于Number()函数在转换字符串时比较复杂而且不够合理,因此在处理整数的时候更常用的是parseInt()函数。parseInt()函数在转换字符串时,更多的是看其是否符合数值模式。它会忽略字符串前面的空格,直至找到第一个非空格字符。如果第一个字符串不是数字字符或者负号,parseInt()会返回NaN;也就是说,用parseInt()转换空字符串会返回NaN。如果第一个字符是数字字符,praseInt()会继续解析第二个字符,知道解析完所有后续字符或者遇到了一个非数字字符。例如,"1234blue"会被转换为1234,”22.5“会被转换为22,因为小数点并不是有效的数字字符。

      如果字符串中的第一个字符是数字字符,parseInt()也能够识别出各种整数格式(即十进制、八进制、十六进制)。为了更好的理解parseInt()函数的转换规则,下面给出一些例子

        var num1 = parseInt("1234blue");    //1234

        var num2 = parseInt("");            //NaN

        var num3 = parseInt("0xA");            //10(十六进制)

        var num4 = parseInt("22.5");        //22

        var num5 = parseInt("070");            //56(八进制)

        var num6 = parseInt("70");            //70

        var num7 = parseInt("10",2);        //2(按二进制解析)

        var num8 = parseInt("10",8);        //8(按八进制解析)

        var num9 = parseInt("10",10);        //10(按十进制解析)

        var num10 = parseInt("10",16);        //16(按十六进制解析)

        var num11 = parseInt("AF");            //56(八进制)

        var num12 = parseInt("AF",16);        //175

      与parseInt()函数类似,parseFloat()也是从第一个字符(位置0)开始解析每个字符。而且也是一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止。也就是说,字符串中的第一个小数点是有效的,而第二个小数点就是无效的了,因此它后面的字符串将被忽略。例如,”22.34.5“将会被转换成22.34。

      parseFloat()和parseInt()的第二个区别在于它始终都会忽略前导的零。由于parseFloat()值解析十进制值,因此它没有用第二个参数指定基数的用法。

        var num1 = parseFloat("1234blue");    //1234

        var num2 = parseFloat("0xA");        //0

        var num3 = parseFloat("22.5");        //22.5

        var num4 = parseFloat("22.34.5");    //22.34

        var num5 = parseFloat("0908.5");    //908.5

     

    三、Boolean 布尔值

    布尔值 true 代表“真”,false 代表“假”。一般关系运算符会返回布尔值的结果。另外,数值的 0、-0、特殊值的 nullNaNundefined 以及空字符("")都会被解释为 false ,其他值则会被解释为 true 。

    下面的代码定义了一个名为 myBoolean 的布尔对象:

    var myBoolean=new Boolean();

    如果布尔对象无初始值或者其值为:  

    0            -0      null   ""      false          undefined         NaN

    那么对象的值为 false。否则,其值为 true(即使当自变量为字符串 "false" 时)!

    var f1 = true, f2 = false

                console.log( f1 && f2 )     // false  && 逻辑运算符,与

                console.log( f1 || f2 )     // true   ||  漏记运算符, 或

    四、Null  空对象  和  Undefined

    首先说下null与undefined区别:

    对已声明但未初始化的和未声明的变量执行typeof,都返回"undefined"。

    null表示一个空对象指针,typeof操作会返回"object"。

    一般不显式的把变量的值设置为undefined,但null相反,对于将要保存对象的变量,应明确的让该变量保存null值。

    var bj;

    alert(bj);      // undefined

    bj = null;

    alert(typeof bj);   //"object"

    alert(bj == null);   //true

    bj = {};

    alert(bj == null);   //false

    Null是一个对象,但是为空。因为是对象,所以 typeof null 返回 'object' 。
    null 是 JavaScript 保留关键字。
    null 参与数值运算时其值会自动转换为 0 ,因此,下列表达式计算后会得到正确的数值:
           表达式:123 + null    结果值:123
           表达式:123 * null    结果值:0


    undefined是全局对象(window)的一个特殊属性,其值是未定义的。但 typeof undefined 返回 'undefined' 。
    虽然undefined是有特殊含义的,但它确实是一个属性,而且是全局对象(window)的属性。请看下面的代码:

    alert('undefined' in window);    //输出:true

    var anObj = {};  

    alert('undefined' in anObj);     //输出:false

    从中可以看出,undefined是window对象的一个属性,但却不是anObj对象的一个属性。
    注意:尽管undefined是有特殊含义的属性,但却不是JavaScript的保留关键字。
    undefined参与任何数值计算时,其结果一定是NaN。
    随便说一下,NaN是全局对象(window)的另一个特殊属性,Infinity也是。这些特殊属性都不是JavaScript的保留关键字!

    五、  Object  对象

    javascript 里最基本的数据类型是对象。JavaScript里的对象其实是一个无序的属性集合,属性又是一个个的名-值对。

    除了字符串,数字,true,false,null或者undefined以外,其他所有的值在JavaScript里头都是对象。

    对象是引用类型,如果变量x表示一个对象,当执行var y = x;语句后,实际上y和x指向的是同一个对象。所以,当你通过y改变对象的值,这种变化也会反映到x上。

    如何创建对象: 


    1. 字面量表示法:

    var book = {};   //创建一个没有属性的对象
    var book = {
       name : "The Definitive Guide";
      "main title" : "JavaScript";     //当属性名中间有空格,或者"-"时,要用引号把属性名括起来
       author : {                          //对象的属性也可以是对象
          firstname : "Rex";
          lastname : "Mai";
       }
    };

    2. 使用new关键字:

    var o = new Object(); // 创建一个空对象,效果等同{}.
    var a = new Array(); // 创建一个空数组,效果等同 [].
    var d = new Date(); // 创建一个表示当前时间的对象
    var r = new RegExp("js"); // 创建一个正则表达式对象

    3. 使用Object.create() ,这是ECMAScript5 新添加的方法,该方法接受一个参数——对象原型。

    var o1 = Object.create({x:1, y:2});
    var o2 = Object.create(Object.prototype);    // 结果等同于{}或new Object()
     
     你可以给该方法传null,结果会是一个不继承任何属性和方法的空对象
     

    获取对象的值:

    通过.或者[]操作符。

             book.title;
             book["title"];
             var propertyName = "title";
             book[propertyName];
    如果对象的属性是固定的,那么这两个方法的作用差别不大。但由于javascript是一种松散类型的语言,所以,你可以在程序运行期间为对象添加任意数量的属性。当你使用.操作符访问对象属性时,.后面的名字其实只是一个标识符,所以你必须完整的输入这个标识符,才能够访问到。
     
    // 对象 Object ,值在{ name:value } ,键对值,即属性名:属性值
    // 可根据其属性名找到相对应的属性值
    var info = { 'name':'yan', 'keMu':'HTML5', 'age':'3' } 
    console.log(info)   // Object { name: "yan", keMu: "HTML5", age: "3" }
    console.log( info.name )  // yan

     

    六、数组(Array)

    ECMAScript的数组与其他语言中的数组有着相当大的区别。虽然ECMAScript中的数组也是有序列表,但是它数组你的每一项可以保存任何类型的数据。ECMAScript数组的大小是可以动态调整的。

    创建数组的基本方式有两种

    第一种是使用Array构造函数,如下所示:

     

    复制代码 代码如下:


    var colors = new Array();


    如果知道数组要保存的项目数量,也可以给构造函数传递参数,而该参数会自动变成length属性的值,如下:


    var colors = new Array(20);


    也可以向Array构造函数中传递数组中应包含的项,如下代码所示:


    var colors = new Array("red","blue");

    第二种使用Array构造函数时也可以省略new操作符,如下所示:

    var colors = Array(20);


    创建数组的第二种方式是使用数组字面量表示法。数组字面量由一对包含数组项的方括号表示,多个数组项之间用逗号隔开,如下所示:

    复制代码 代码如下:


    var color = ["red","blue"];
    var names = [];
    var values = [1,2,]     //IE8及之前3项,其他2项,不建议使用


    与对象一样,在使用数字字面量表示法时,也不会调用Array的构造函数。

    在读取和设置数组的值时,要使用方括号并提供相应值的基于0的数字索引,如下所示:

    复制代码 代码如下:

    var colors = ["red","blue"]; //定义数组
    alert(colors[0]); //red
    colors[1] = "black" //修改第2项
    colors[2] = "brown" //新增第3

  • 相关阅读:
    围棋术语中英文对照
    修改grub及console的分别率 Linux-Ubuntu
    内核crash (Linux)
    pthread_create build
    内联函数定义的关键字inline及由此产生的编译问题简析
    debian家族重量级成员Ubuntu 20.04下载链接开启了。。。
    stm32 GPIO 输出配置参照
    Linux安装应用程序后,点击图标没法应,怎么解决呢?
    c语言中的引用使用
    QA Issue: PN: startUp is upper case, this can result in unexpected behavior. [uppercase-pn]
  • 原文地址:https://www.cnblogs.com/flyqingfei/p/5777461.html
Copyright © 2011-2022 走看看