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

第一篇 关于基本概念

作者: 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