JS基础 - 类型

类型分类

  • 原始类型 
    包括数字,字符,布尔,null,undefined。
  1. 数字:语言本身没有整数和浮点类型,变量为64位浮点数,溢出的取值为+/-Infinity,非法数字取值为NaN。
  2. 字符:由16位的字符组成。不能改变字符串中的字符值。
  3. undefined,Infinity和NaN都是全局属性。

  • 对象类型 
    包括对象(实例),数组,函数(可执行对象),类(ES2015+)。

类型判断

  • typeof 
    typeof是一个运算符,可以返回操作数类型的字符串。
  1. 操作数为数字,字符,布尔的原始类型时,分别返回"number", "string", "boolean"。
  2. typeof null返回"object"。
  3. typeof undefined返回"undefined"。
  4. 操作数为对象/数组实例时,返回"object"。
  5. 操作数位可执行对象时,返回"function"。

  • instanceof 
    instanceof是一个运算符,可以判断左操作数是否是右操作数的实例,是则返回true,否则范围false。

  • Object.prototype.toString.call

   通过Object.prototype.toString.call(value)方式,可以检查一个变量所属的类型,但无法检查自定义对象类型。

  1. 操作数为数字、字符、布尔的原始类型时,返回[object ],type是将原生类型转换为对象后的类型,例如:String, Number, Boolean。
  2. 操作数是null时,返回[object Null]。
  3. 操作数是undefined时,返回[object Undefined]。
  4. 操作数是对象时,返回[object ],type是对象所属类型,包括本地对象、内置对象和宿主对象,但对于自定义对象,type都是Object。
  5. 操作数是可执行对象或class时,返回[object Function]。

类型转换

类型转换规则

  • 原始类型转原始类型
  数字 字符 布尔
数字 原值 0/NaN -> false
其他 -> true
字符 NaN true
布尔 true -> 1
false -> 0
"true"或"false"
null 0 "null" false
undefined NaN "undefined" false
  • 原始类型转对象类型

  1. 字符类型用String对象包装

  2. 数字类型用Number对象包装
  3. 布尔类型用Boolean对象包装
  4. null和undefined不能做对象包装

  • 对象类型转原始类型

  1. 对象类型转字符类型规则 

  2. 对象类型转数字类型规则 

运算类型转换

不同类型的操作数在做运算,或者操作数是对象类型时(===除外),会先对数据类型做隐式转换,转换规则如下:

  • +表达式运算
  1. 对象类型转换为原始类型再运算,非日期类型按对象转数字的规则,日期类型直接转换为字符类型。
  2. 其中一个操作数是字符,则都转换为字符类型运算。
  3. 没有操作数是字符类型,则都转换为数字类型运算。

  • 算术表达式运算 
    包括-, ++,–,位运算等表达式(不含+运算),所有类型都会转换为数字再运算。

  • 关系表达式运算

  1. 包括==,!=以及比较运算符,所有类型都会转换为数字再运算。
  2. 如果操作数为null或undefined,则在==运算时返回true。
  3. 如果两个操作数都为对象类型,且为同一个对象,则在==运算时返回true。

  • 逻辑表达式运算

      包括&&,||,!等运算符,false、null、undefined、0、NaN的操作数运算结果为假,其它操作数运算结果都为真。

posted @ 2015-07-07 23:06  蓼椮  阅读(145)  评论(0编辑  收藏  举报