美文网首页
第一篇 关于基本概念

第一篇 关于基本概念

作者: Jokeryang | 来源:发表于2017-06-15 15:36 被阅读0次

    1.1 数据类型

    JavaScript的基本数据类型有undefinednullbooleannumberstring以及一种较为复杂的数据类型object
    由于JS的数据类型是松散类型的,因此需要使用typeof操作符对数据类型进行检测,这里着重提一下:

      typeof null                // "object"
      typeof function            // "function"
    

    函数尽管不是一种数据 类型,但由于其特殊的属性,有必要与其他数据类型进行区分。

    1.1.1 Undefined

    在变量声明但未定义时,内部会自动为其赋值为undefined。不过,包含undefined值的变量与未声明的变量之间仍然存在一些差别,我们来看下面两段代码:

      var message                // 该变量声明后默认为undefined
      // age 为未声明的变量
      alert( message )           // "undefined"
      alert( age )               // 发生错误
    
      var message                // 该变量声明后默认为undefined
      // age 为未声明的变量
      typeof message             // "undefined"
      typeof age                 // "undefined"
    

    虽然在alert中age会产生错误,但在typeof中未声明的age也会返回undefined值,这是比较奇怪的现象!同时,typeof是唯一地能对未声明变量进行的操作。

    1.1.2 Null

    null值表示一个空对象的指针,undefined实际上派生自null值,在JS的相等性测试中,两者是相等的,注意这里的相等(==)全等(===)不同。

      null == undefined          // true
    

    1.1.3 Boolean

    Boolean类型分为两种,即true和false,这里要注意大小写,Boolean是对大小写敏感的。
    在不同数据类型中,Boolean类型有不同的表现形式,具体见下表。

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

    上表中Undefined一行中,n/a是not applicable的缩写,意为 “ 不适用 ”

    1.1.4 Number

    Number类型使用IEEE754格式来表示整数和浮点数。浮点数的最高精度是17位小数,但在进行计算时它的精度远远不如整数,如0.1+0.2的结果不是0.3,而是0.30000000000000004。

      if ( a+b == 0.3 ) {            // 返回false,因此不要做这种测试!
          alert ( " you got 0.3 " )
      }
    

    在JavaScript中,存在能够保存的最大值Number.MAX_VALUE和最小值Number.MIN_VALUE,超过这两个值即为Infinity-Infinity

    该类型中有一个特殊的数值,即NaN(Not a Number),该值是为了防止在数值计算中返回非数值的情况,其本身有两个特点。

    • 涉及NaN的操作均会返回NaN;
    • NaN与任何值都不想等,包括它自己。

    数值转换:Number ( )、parserInt ( )、parserFloat ( )之间的比较。Number ( )可以接受任何数据类型,而parserInt ( )、parserFloat ( )只能接受字符串类型

    • ** Number ( ) **
    1. true => 1
    2. false 或 null => 0
    3. undefined => NaN
    4. string => 若为数字(包括二进制、十进制、八进制、十六进制和浮点数),均转换成十进制对应的数字;若为空字符串(" "),转换为0;其他情况,均转换为NaN
    5. object => 先调用valueOf( )方法,依次按照之前的规则进行转换,若返回为NaN,则调用toString( )方法,再依次按照前面的规则进行转换
    • parserInt ( )parserFloat ( )
      parserInt ( )从第一个不为空格的数字字符开始检测,直到检测到非数字字符为止,它可以解析不同进制的数值,并返回对应十进制的值,通过传入第二个参数,即进制值来实现;相比之下,parserFloat ( )只能解析十进制的浮点数,且能解析第一个小数点,遇到第二个小数点会自动忽略。

    下面是一些常见的例子:

      Number( "Hello World" )        // NaN
      Number( undefined )            // NaN
      Number( " " )                  // 0
      Number( "0000011" )            // 11
      Number( true )                 // 1
      parseInt( "1234Joker" )        // 1234
      parseInt( " " )                // 0
      parseInt( "0xA" )              // 10
      parseInt( 22.5 )               // 22
      parseInt( "70" )               // 70
      parseInt( "10", 2 )            // 2
      parseInt( "10", 8 )            // 8
      parseInt( "10", 10 )           // 10
      parseInt( "10", 16 )           // 16
      parseFloat( "0xA" )            // 0
      parseFloat( "22.5" )           // 22.5
      parseFloat( "22.4.5" )         // 22.4
    

    1.1.5 String

    String类型用于表示由零个或多个16位字符组成的Unicode字符组成的字符序列,即字符串。可以用(")或者('),但两边的引号类型要相等。字符串带有length属性,用于表示字符串的长度。

    要想将别的数据类型如数值、布尔值、对象和字符串转换为字符串类型,可以使用toString( )方法,不过null和undefined值没有这个方法,需要使用转型函数String( )。

    1.1.6 Object

    简单来说,对象即为一组数据和功能的集合,关于对象的具体内容,会在后续文章中进行阐述

    1.2 操作符

    1.2.1 一元操作符

    • 递增和递减操作符
      这种操作符又各自分为两种,前置型和后置型,下面以递减为例
      var num1 = 2;
      var num2 = 20;
      var num3 = --num1 + num2;      // 等于21
      var num4 = num1 + num2;        // 等于21
    
      var num1 = 2;
      var num2 = 20;
      var num3 = num1-- + num2;      // 等于22
      var num4 = num1 + num2;        // 等于21
    

    从上面的代码中可以看出,前置型操作符使用num-1进行运算,而后置型操作符则使用num进行运算。此外,这四个操作符对任何值均有效。

    • 一元加和减操作符

    加操作符对数值不会有任何影响,减操作符主要用于表示负数,这两个操作符应用于非数值类型的值时,其转换规则与Number( )相同,这里不再赘述。

    1.2.2 布尔操作符

    布尔操作符一共有三种:非(NOT)、与(AND)、或(OR)

    • 逻辑非
    数据类型 返回值
    空字符转、数值0、null、NaN、undefined true
    对象、非空字符串、非0数值(包括Infinity) false
    • 逻辑与
      可以应用于任何数据类型,不一定返回布尔值,具体规则:

    1.若第一个操作数是对象,则返回第二个操作数;
    2.若第二个操作数是对象,则只有当第一个操作数返回true的情况下才返回该对象;
    3.若两个操作数都是对象,则返回第二个操作数;
    4.若第一个操作数是nulll,则返回null;
    5.若第一个操作数是NaN,则返回NaN;
    6.若第一个操作数是undefined,则返回undefined。

    • 逻辑或
      可以应用于任何数据类型,不一定返回布尔值,具体规则:

    1.若第一个操作数是对象,则返回第一个操作数;
    2.若第一个操作数求值为false,则返回第二个操作数;
    3.若两个操作数都是对象,则返回第一个操作数;
    4.若两个操作数都是null,则返回null;
    5.若两个操作数都是NaN,则返回NaN;
    6.若两个操作数都是undefined,则返回undefined。

    逻辑与逻辑或都属于短路操作,即如果第一个操作数能决定结果,那么不会对第二个操作数求值。

    1.2.3 乘性操作符

    乘性操作符总共有三种:乘法、除法和求模。这里只列举一些较为特殊的用法。
    乘法:

    • 若有一个操作数为NaN,则返回NaN;
    • 若是Infinity与0相乘,则返回NaN;
    • 若是Infinity与非0数相乘,则返回Infinity或者-Infinity

    除法:

    • 若是Infinity被Infinity除,则返回NaN;
    • 若是0被0除,则返回NaN;
    • 若是非零的有限数被0除,则返回Infinity或者-Infinity

    1.2.4 加性操作符

    特殊用法:

      Infinity + Infinity           // Infinity
      -Infinity + -Infinity         // -Infinity
      Infinity + -Infinity          // NaN
    
      +0 + +0          // +0
      +0 + -0          // +0
      -0 + -0          // -0
    

    另外,当加性运算符遇到字符串时,就会将其他数据类型转换成字符串类型,然后进行拼接

      "" + 123 + 456         // 123456
    

    1.2.5 关系操作符

    关系操作符主要有小于(<)、大于(>)、小于等于(<=)、大于等于(>=),这些操作符均返回一个布尔值。

    需要注意:

    1. 若两边均为字符串,则比较两个字符串的编码值;
    2. 若又一个操作数为数值,则领一个操作数转换成数值再进行比较。
      var res = "Brick" < "alphabet"         // true
      var res2 = "23" < "3"                  // true
    

    还有一个比较有意思的现象,根据规则,NaN与任何值进行比较均返回false,所以:

      var res1 = NaN < 3            // false
      var res2 = NaN >= 3           // false
    

    1.2.6 相等操作符

    相等操作符可以分为两组,一种为相等和不想等(== 和 !=),另一种为全等和不全等(=== 和 !==)。== 和 != 会先转换数操作数(称为强制转型),然后再比较它们的相等性;而 === 和 !== 则要求相比较的两个操作数类型和值均相等。
    下面列举一些相等操作符的特殊用法:

      null == undefined             // true
      "NaN" == NaN                  // false
      5 == NaN                      // false
      NaN == NaN                    // false
      NaN != NaN                    // true
      false == 0                    // true
      true == 1                     // true
      true == 2                     // false
      undefined == 0                // false
      null == 0                     // false
      "5" == 5                      // true
      "5" === 5                     // false
    

    除以上几种操作符以外,javascript还提供了条件操作符、赋值操作符、逗号操作符,由于这几种操作符较为简单,这里不进行详细介绍。

    相关文章

      网友评论

          本文标题:第一篇 关于基本概念

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