zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    主线程等待子线程结束再做响应
    前端开发注意细节
    XSS攻击前端需注意
    移动端开发碰到一个坑
    连续改变Chrome浏览器窗口大小,可以导致内存泄漏
    js中使用使用原型(prototype)定义方法的好处
    父节点使用css的transform: translate(0, 0)时position:fixed在chrome浏览器中无效
    CSS 中的 em单位
    观察者模式和发布/订阅模式的区别
    搜索练习4
  • 原文地址:https://www.cnblogs.com/PrajnaParamita/p/5811079.html
Copyright © 2011-2022 走看看