• JS基本概念 -- 数据类型(一)


    ECMAScript中有5种简单数据类型(也成为基本数据类型): Undefined、Null、Boolean、Number、String;

    1种复杂数据类型: Object,Object本质上是由一组无序的名值对组成的。

    ECMAScript不支持任何创建自定义类型的机制,所有值最终都将是上述6种数据类型之一。

    1.typeof操作符

     typeof操作符用来检测给定变量的数据类型。对一个值使用typeof操作符可能返回下列某个字符串:

    • undefined  ---  如果这个值未定义
    • boolean     ---  如果这个值是布尔值
    • string        ---  如果这个值是字符串
    • number     ---  如果这个值是数值
    • object       ---  如果这个值是对象或null
    • function    ---  如果这个值是函数
    var message = "some thing";
    alert(typeof message);        //string
    alert(typeof (message));     //string    typeof是操作符而不是函数,因此圆括号可以使用,但不是必须的
    alert(typeof 95);            //number
    alert(typeof false);        //boolean
    alert(typeof null);         //object

    2.Undefined类型

     Undefined类型只有一个值,即特殊值undefined。 在使用var声明变量但未对其加以初始化时,这个值就是undefined。

    var message;
    alert(message == undefined);    //true

    包含undefined值的变量与尚未定义的变量是不一样的:

    var message;
    alert(message);    //undefined
    
    //下面这个变量并没有声明
    //var age;
    alert(age);        //Uncaught ReferenceError: age is not defined

    对未声明的变量执行typeof操作符同样也会返回undefined

    var message;
    alert(typeof message);    //undefined
    
    //下面这个变量并没有声明
    //var age;
    alert(typeof age);        //undefined

    3.Null 类型

     Null类型只有一个值,这个特殊值是null。从逻辑角度看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null值时会返回"object"的原因。

    var car = null;
    alert(typeof car);    //object
    
    /* 如果定义的变量准备在将来用于保存对象,
     * 那么最好将该变量初始化为null 
     * 这样一来,只要检查null值就可以知道相应的变量是否已经保存了一个对象的引用
     */
    if(car != null){
        //
    }

    4.Boolean类型

     Boolean类型是ECMAScript中使用得最多的一种类型,该类型只有两个字面值:true 和 false。

     Boolean类型的字面值true和false是区分大小写的,True和False都不值Boolean值,只是标识符。

     虽然Boolean类型的字面值只有两个,但ECMAScript中所有类型的值都有与这两个Boolean值等价的值。

     要将一个值转换为其对应的Boolean值,可以调用转型函数Boolean()

    var message = "Hello World";
    var messageAsBoolean = Boolean(message);
    alert(messageAsBoolean);    //true

      各种数据类型及其对应的转换规则

    数据类型      
    转换为true的值 转换为false的值      
    Boolean true flse
    String 任何非空字符串 ""(空字符串)
    Number 任何非零数字值(包括无穷大) 0 和 NaN
    Object 任何对象 null
    Undefined   undefined

    这些转换规则对理解流控制语句(如 if 语句)自动执行相应的Boolean转换非常重要:

    var message = "Hello World";
    if(message){
        alert("Value is true");
    }

    5.Number类型

     Number类型使用IEEE754格式表示整数和浮点数值。为支持各种数值类型,ECMA-262定义了不同的数值字面量格式。

    var intNum = 55;    //十进制整数
    
    /*
     *八进制字面值的第一位必须是零(0),然后是八进制数字序列(0~7)。
     *八进制字面量在严格模式下是无效的
     */
    var octalNum1 = 070;    // 八进制的56
    var octalNum2 = 079;    // 无效的八进制数值 --- 解析为79
    var octalNum3 = 08;        // 无效的八进制数值 --- 解析为8
    
    /*
     *十六进制字面值的前两位必须是0x,后跟任何十六进制数字(0~9 A~F)
     *字母可以大写,也可小写
     */
    var hexNum1 = 0xA;        //十六进制的10
    var hexNum2 = 0x1f;        //十六进制的31
    
    /*在进行算术计算时,所有以八进制和十六进制表示的数值最终都将被转换成十进制*/
    /*浮点数值*/
    var floatNum1 = 1.1;
    var floatNum2 = 0.1;
    var floatNum3 = .1;        // 有效,但不推荐
    
    var floatNum4 = 1.;        //小数点后面没有数字 -- 解析为1
    var floatNum5 = 10.0;    //整数 -- 解析为10

    5.1数值范围

      ECMAScript能够表示的最小数值保存在Numer.MIN_VALUE中,最大值保存在Number.MAX_VALUE中。

    alert(Number.MIN_VALUE);    //5e-324
    alert(Number.MAX_VALUE);    //1.7976931348623157e+308

    如果某次计算结果得到了一个超出JavaScript数值范围的值,那么这个数值将被自动转换成特殊的Infinity值。

    具体来说,如果这个数值是负数,则会被转换成-Infinity。如果是正数,则会被转换成Infinity。

    Infinity不是能够参与计算的数值,可以使用isFinite()函数确定数值是否位于有效区间内。

    var max = Number.MAX_VALUE * Number.MAX_VALUE;
    var min = - Number.MAX_VALUE;
    alert(isFinite(max));    //false
    alert(isFinite(min));    //true

    5.2 NaN

      NaN,即非数值(Not a Number)是一个特殊值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。

      NaN 有两个非同寻常的特点:

    • 任何涉及NaN的操作都会返回NaN
    • NaN与任何值都不相等,包括NaN本身。
    var num = 10*NaN;
    alert(num);        //NaN
    
    alert(NaN == NaN);    //false

    ECMAScript定义了isNaN()函数,这个函数接收一个参数,该参数可以是任何类型。函数在接收到参数后会尝试将这个值转换为数值。不能被转换为数值的值将返回true

    alert(isNaN(NaN));     //true
    alert(isNaN(10));      //false (10是一个数值)
    alert(isNaN("10"));    //false (可以被转换成数值10)
    alert(isNaN("blue"));  //true (不能转换成数值)
    alert(isNaN(true));    //false (可以转换成数值1)
    alert(isNaN(false));  //false (可以转换成数值0)

    5.3 数值转换

      有三个函数可以把非数值转换为数值:

    1. Number():可用于任何数据类型
      //1.如果是Boolean值,true -- 1; false --- 0
      alert(Number(true));    //1
      alert(Number(false));    //0
      
      //2.如果是数字值,只是简单地传入和返回
      alert(Number(10));    //10
      alert(Number(-10));    //-10
      
      //3.如果是null值,返回0
      alert(Number(null));    //0
      
      //4.如果是undefined,返回NaN
      alert(Number(undefined));    //NaN
      
      //5.如果是字符串,遵循下列规则
      //5.1 如果字符串只包含数字(包括前面带正号或负号的情况),则将其转换成十进制数值
      alert(Number("123"));    //123
      alert(Number("+011"));    //11  (前置0被忽略)
      alert(Number("-1993"));    //-1993
      
      //5.2 如果字符串中包含有效的浮点格式,则将其转换为对应的浮点数值
      alert(Number("1.1"));    //1.1
      alert(Number("01.1"));    //1.1
      alert(Number("-01.1"));    //-1.1
      
      //5.3 如果字符串中包含有效的十六进制格式,则将其转换成十进制整数值
      alert(Number("0xf"));    //15
      
      //5.4 如果字符串是空的,则将其转换成0
      alert(Number(""));    //0
      
      //5.5 如果字符串中包含除上述格式之外的字符,则将其转换成NaN
      alert(Number("blue"));    //NaN
      alert(Number("123blue"));//NaN
      alert(Number("blue123"));//NaN
      
      /*
       *6.如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值。
       *  如果转换的结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符串值
       */
    2. parseInt():把字符串转换成数值。在转换字符串时,更多的是看其是否符合数值模式。它会忽略字符串前面的空格,直到找到第一个非空格字符。如果第一个字符不是数字字符或者负号,parseInt()就会返回NaN。
      //1.如果第一个字符不是数字字符或者负号,parseInt()就会返回NaN。
      alert(parseInt(""));    //NaN
      alert(parseInt("xx999"));    //NaN
      
      //2.如果第一个字符是数字字符,parseInt()会继续解析第二个字符,直到解析完所有后续字符或遇到了一个非数字字符。
      alert(parseInt("999"));    //999
      alert(parseInt("-999"));//-999
      alert(parseInt("999aaa"));//999
      alert(parseInt(22.5));    //22
      
      //3.如果字符串中的第一个字符是数字字符,parseInt()也能够识别出各种整数格式
      alert(parseInt("0xA"));    //10 (十六进制)
      alert(parseInt("70"));    //70 (十进制)
      alert(parseInt("000"));    //0 (十进制)
      alert(parseInt("007"));    //7 (十进制)
      
      /*
       *4.在解析八进制字面量的字符串时,ECMAScript 3和5存在分歧
       *ECMAScript3 认为是56(八进制), ECMAScript5认为是70(十进制)
       *可以为这个函数提供第二个参数:转换时使用的基数(即进制数)
       */
      alert(parseInt("070", 8));    //56 (八进制)
      alert(parseInt("0xAF", 16));    //175
      alert(parseInt("AF", 16));    //175  指定了进制数,可以省略0x
      
      alert(parseInt("10", 2));    //2
      alert(parseInt("10", 8));    //8
      alert(parseInt("10", 10));    //10
      alert(parseInt("10", 16));    //16
    3. parseFloat():从第一个字符(位置0)开始解析每个字符。一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止。
      //1.字符串中的第一个小数点是有效的,第二个就无效了,因此他后面的字符串将被忽略。
      alert(parseFloat("22.34.5"));    //22.34
      
      //2.会忽略前面的0,只解析十进制数,没有第二个参数
      alert(parseFloat("098.5"));    //98.5
      alert(parseFloat("098.5Blue"));//98.5
      alert(parseFloat("098Blue.5"));//98
      alert(parseFloat("070.5"));//70.5
      alert(parseFloat("0Ax"));//0
      
      //3.如果字符串时一个可解析为整数的数,则返回整数
      alert(parseFloat("1234"));    //1234
      alert(parseFloat("1234Blue"));//1234
  • 相关阅读:
    Codeforces 1045C Hyperspace Highways (看题解) 圆方树
    Codeforces 316E3 线段树 + 斐波那切数列 (看题解)
    Codeforces 803G Periodic RMQ Problem 线段树
    Codeforces 420D Cup Trick 平衡树
    Codeforces 295E Yaroslav and Points 线段树
    Codeforces 196E Opening Portals MST (看题解)
    Codeforces 653F Paper task SA
    Codeforces 542A Place Your Ad Here
    python基础 异常与返回
    mongodb 删除
  • 原文地址:https://www.cnblogs.com/PrajnaParamita/p/5811079.html
Copyright © 2020-2023  润新知