1. 数据类型 概述

1.1 概述

JavaScript 语言的每一个值,都属于某一种数据类型。
JavaScript 的数据类型有6种。(ES6 新增 Symbsol类型的值 该类型会在ES6笔记里出现)

  • 数值( number ):整数和小数 (比如 1 和 3.14 )
  • 字符串 (string) :文本 (比如:Hello world)
  • 布尔值 ( Boolean ):表示真伪的两个特殊值,即( true )和 ( false )
  • undefined :表示“未定义”或 不存在,即由于目前没有定位,所以此处暂时没有任何值
  • null:表示空值,即此处的值为空。
  • 对象 ( Object ):各种值组成的集合。

    通常来说,数值、字符串、布尔值这三种类型,合成为原始类型(primitive type)的值,即它们是最基本的数据类型,不能再细分了。 对象则称为合成类型( complex type )的值,因为一个对象往往是多个原始类型的值的合成,可以看作是一个存放了各种值得容器 undefined 和 null 一般将它们堪称两个特殊值

so 对象是最复杂得数据类型, 又可以分成三个子类型。

  • 狭义得对象 ( object )
  • 数组 ( array )
  • 函数 ( function )

狭义的对象和数组是两种不同的数据组合方式,除非特别声明,本教程的“对象”都特指狭义的对象。

函数其实是处理数据的方法,JavaScript 把它当成一种数据类型,可以赋值给变量
这为变成带来了很大的灵活性,也为JavaScript的“函数式编程” 奠定了基础

1.2 typeof

JavaScript 有三种方法,可以确定一个值到底是什么类型。

  • typeof 运算符
  • instanceof 运算符
  • Object.prototype.toString 方法

    这里先不做 instanceof 运算符 和 Object.prototype.toString 方法。将在后文介绍

typeof 运算符 可以返回一个值的数据类型。
数值、字符串、布尔值、对象和数组、函数、undefined、null分别返回
number、string、boolean、object、function、undefined、object

  1. typeof 1 // number
  2. typeof '1' // string
  3. typeof false // boolean
  4. typeof [] // object
  5. typeof {} // object
  6. function h(){}
  7. typeof h // function
  8. typeof undefined // undefined
  9. typeof null // object

上述中 数组类型 [] 返回 object 表示在JavaScript 内部中,数组的本质上只是一种特殊的对象。
如何区分数组和对象 使用 instanceof 运算符 。(详情在 面向对象编程)

  1. var a = []
  2. var o = {}
  3. a instanceof Array // true
  4. o instanceof Array // false

上上述中,null 的类型是 object 是因为历史原因造成的,为了兼容以前的代码, typeof
null 返回 object 就没法改变啦 。在1995年 JavaScript 第一版 只设计了五种数据类型( 对象、 整数、浮点数、字符串 和 布尔值),没有考虑 null 只把它当作 object 的一种特殊值
后来 null 独立出来,作为一种单独的数据类型

2. null ,undefined 和 布尔值

概述:
null 与 undefined 都可以表示没有,含义非常相似。
将一个变量赋值为 undefined 或 null 老实说,语法效果几乎没有区别。

注: 这两个 在 if 语句中,自动转为 false 在相等运算符( == )视为相等

  1. if(!undefined)
  2. console.log( "undefined is false" )
  3. if(!null)
  4. console.log( "null is false" )
  5. null == undefined // true

有一点要注意的是:
null 可以自动转为 0,undefined 转为数值为 NaN( not a number)

  1. null + 3 // 3
  2. undefined + 3 // NaN

在1995年 JavaScript 诞生时,最初像Java一样,只设置了 null 表示“无”。根据 C语言的传统 null 可以自动转为 0 null 在就像 Java 里一样,视为一个对象。用来表示“无”的值 最好不是对象。其次 那是 JavaScript 不包括错误处理机制, null 自动转为0 很不容易发生错误 因此有设计了一个undefined。 区别在于: null 是一个表示 “空” 的对象,转为数值为 0 undefined 是一个表示“此处无定义”的原始值,转为数值为:NaN

2.1 null 和 undefined 的用法和含义

对于 null 和 undefiend ,大致可以像下面这样理解。
null 表示空值,及该处的值现在为空。
调用函数时,某个参数 未设置任何值,这是就可以传入null,表示该参数为空。
比如 某个函数接收引擎抛出的错误作为参数,如果运行过程中未出错,那么这个参数就会传入null,表示未发生错误
undefined 表示“未定义”下面时返回 undefined 的典型场景

  1. var i;
  2. i; // undefined 只声明了 但没有赋值
  3. function f(x){return x}
  4. f() // undefined 调用函数时,应该提供的参数没有提供,该参数等于undefined
  5. var o = new Object();
  6. o.p; // undefined o 是Obejct构造函数的实例。但没有赋值的属性
  7. function f(){}
  8. f() // undefined 函数没有返回值( return ), 默认返回 undefined

2.3 布尔值

布尔值代表 “真”和“假”两个状态。“真”用关键字 true 表示,“假”用关键字 false 表示
布尔值 只有两个值的!
下列运算符 会返回 布尔值:

  1. - 前置逻辑运算符:!(not)(可以理解为取反。!false === true,反之亦然)
  2. - 相等运算符 :===,!==,==,!=
  3. - 比较运算符 :>,>=,<,<=

如果JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为 布尔值。
转换规则除了下面六个值被转为 false 其他都是 true

  • undefined
  • null
  • false
  • 0
  • NaN
  • “” 或 ‘’ (空字符串)

注:布尔值 往往用于程序流程的控制

  1. if('')
  2. console.log('true')
  3. // 不会有任何的输出

注意:空数组 [] 和 空对象 {} 对应的布尔值 为 true (因为 它们是存在的)