JavaScript 之数据类型

2018/09/05 JavaScript

常用数据类型

JavaScript 是弱类型脚本语言,声明变量时无需指定变量的数据类型。

JavaScript 是解释时动态决定的,数据保存在内存中时也是有数据类型的。

JavaScript 常用数据类型如下:

  • 数值类型 (number): 包含整数和浮点数,比如:4, 4.5

  • 布尔类型 (boolean): 只有 true 或 false 两个值,比如:true,false

  • 字符串类型 (string): 字符串必须用双引号或单引号括起来。

  • 未定义类型 (undefined): 专门用来确定一个已经创建但是没有初值的变量

  • 空类型 (null): 用于表明某个变量的值为空。

  • 对象类型 (object):javacsript 中的对象、数组等。

其中,

number、string、boolean、null、undefined 属于原始类型

object(Function、Array、Date、…) 属于对象类型

PS:javascript 没有字符型(char)数据的概念

数据类型转换

JavaScript 和其它编程语言一样有进行类型转换的能力。

  • 通过 “+” 号或 toString() 方法将数值转换成字符串

  • 通过 parseInt() 将字符串转换成整形

  • 通过 parseFloat() 将字符串转换成浮点型

隐式转换

+ 和 -

Javascript-Data-Type-02

"45" + 45  // 字符串拼接,结果为 4545
"45" - 45  // 两个数相减,结果为 0

利用 +- 得规则可以巧妙的转换类型,

num - 0   // 字符串类型的 num 将被隐式转换成数值类型
num + ''  // 数值类型的 num 将被隐式转换成字符串类型

PS:加法运算,除了算数意义,还表示着字符串拼接。

a == b

== 先判断类型是否相同,类型不同则对一些类型做转换,再判断值是否相同,如果是对象还需要判断引用是否相同。

"1.23" == 1.23  // true,"1.23" 转换成 1.23 再比较
0 == false // true,false 转换成 0 再比较
null == undefined  // true,undefined 值是派生自 null 值
new Object() == new Object()  //  false,JS 对象比较是比较引用,而不是值
[1, 2] == [1, 2]  // false,比较引用,所以不相等

== 比较时,有如下特点:

  • 类型相同:
    • NaN ≠ NaN
    • new Object ≠ new Object
    • null == null
    • undefined == undefined
  • 类型不同,尝试类型转换和比较:
    • null == undefined 相等 // true
    • number == string 转 number 1 == ‘1.0’ // true
    • boolean == ? 转 number 1 == true // true
    • object == number string 尝试对象转为基本类型 new String(‘hi’) == ‘hi’ // true
    • 其它:false

a === b

=== 先判断类型是否相同,再判断值是否相同,如果是对象还需要判断引用是否相同。

=== 比较时,有如下特点:

  • 类型不同,返回 false
  • 类型相同
    • NaN ≠ NaN
    • new Object ≠ new Object
    • null === null
    • undefined === undefined

类型检测

  • typeof

适合基本类型及 function 检测,遇到 null 失效。

实例:

typeof 100   // number
typeof true   // boolean
typeof function () {}   // function
typeof(undefined) )   // undefined
typeof(new Object() )   // object
typeof([1 2] )   // object
typeof(NaN)   // number
typeof(null)   // object,
  • instanceof

通过 {}.toString 拿到,适合内置对象和基元类型,遇到 nullundefined 失效 (IE678 等返回 [object Object])。

实例:

Javascript-Data-Type-02

  • Object.prototype.toString

适合自定义对象,也可以用来检测原生对象,在不同 iframe 和 window 间检测时失效。

实例:

Object.prototype.toString.apply([]); === "[object Array]"
Object.prototype.toString.apply(function(){}); === "[object Function]"
Object.prototype.toString.apply(null); === "[object Null]"
Object.prototype.toString.apply(undefined); === "[object Undefined]"

IE6/7/8 Object.prototype.toString.apply(null) 返回 "[object Object]"
  • constructor

  • duck type

Search

    Table of Contents