← 返回首页
Javascript基础教程(六)
发表时间:2020-03-25 13:36:49
讲解Javascript 的基本数据类型

1.Javascript的基本数据类型

一共六种基本数据类型,见下表:

名称 说明
布尔值(Boolean) 有2个值分别是:true 和 false.
数字(Number) 整数或浮点数,例如: 42 或者 3.14159。
null 一个表明 null 值的特殊关键字。 JavaScript 是大小写敏感的,因此 null 与 Null、NULL或变体完全不同。
undefined 和 null 一样是一个特殊的关键字,undefined 表示变量未定义时的属性。
字符串(String) 字符串是一串表示文本值的字符序列,例如:"Howdy" 。
代表(Symbol) 在 ECMAScript 6 中新添加的类型。一种实例是唯一且不可改变的数据类型。

通过一个实例,理解以上基本类型。

<script>
    let num = 100;
    let flag = true;
    let name = '张三'; //或者let name = "张三"
    let obj = null;
    const s1 = Symbol();
    const s2 = Symbol();

    console.info(typeof(num));
    console.info(typeof(flag));
    console.info(typeof(name));
    console.info(typeof(haha));
    console.info(typeof(obj));
    console.info(typeof(s1));

    console.log(s1 === s2); // false
</script>

运行结果:
number
boolean
string
undefined
object
symbol
false

注意:null的类型,使用typeof时返回的是object,这是由于历史原因造成的。1995年的 JavaScript 语言第一版,只设计了五种数据类型(对象、整数、浮点数、字符串和布尔值),没考虑null,只把它当作object的一种特殊值。

symbol是ES6中一种新的数据类型。平时很少会用到,今天特意了解一下。或许某天遇到什么需求可以派上用场。每个symbol实例都是唯一的。按它的特性来说能我遇到过需要Symbol用场景确实不是很多。它主要是可以通过它的唯一性代替常量。

2.Number.NaN 属性

NaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。可以把 Number 对象设置为该值,来指示其不是数字值。使用 isNaN() 来判断一个值是否是数字。原因是 NaN 与所有值都不相等,包括它自己。 isNaN() 函数可用于判断其参数是否是 NaN,该值表示一个非法的数字(比如被 0 除后得到的结果)。

<script>
    console.info(isNaN('number')); // true
    console.info(isNaN('1000')); // false
    console.info(isNaN(1000)); // false
</script>

运行结果:
true
false
false

3.null与undefined

二者都可以表示“没有”,含义非常相似。将一个变量赋值为undefined或null,老实说,语法效果几乎没区别。实际的区别是:null是一个表示“空”的对象,转为数值时为0;undefined是一个表示"此处无定义"的原始值,转为数值时为NaN。

例如:

<script>
    let obj1 = null;
    let obj2 = undefined;
    console.log(obj1==obj2);
    console.log(obj1===obj2);
    console.info(Number(obj1)); // 0
    console.info(Number(obj2)); // NaN
    console.info(5 + obj1);// 5
    console.info(5 + obj2)// NaN
</script>

运行结果:
true
false
0
NaN
5
NaN

注意:JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。转换规则是: 1.除了下面六个值被转为false,其他值都视为true。 undefined;null;false;0;NaN;""或''(空字符串)。 2.空数组([])和空对象({})对应的布尔值,都是true。

测试效果:

<script>
    console.log(Boolean(undefined) == false);
    console.log(0==false);
    console.log(Boolean(null)==false);
    console.log(''==false);
    console.log(""==false);
    console.log(Boolean(NaN)==false);
</script>

运行结果:
true
true
true
true
true
true

注意:对于undefined、null、NaN不进行强制类型转换,直接与false比较结果为false;

<script>
    console.log(undefined == false);
    console.log(undefined == null);
    console.log(null==false);
    console.log(undefined == undefined);
    console.log(NaN==false);
    console.log(NaN==undefined);
</script>

运行结果:
false
true
false
true
false
false

总结:

关于Javascript的数据类型网上有两种版本的定义,一种是分为基本类型和引用类型,一种是不区分基本类型和引用类型。

1)区分基本类型和引用类型 基本类型:number/string/boolean/null/undefined/symbol(ES6新添加的) 引用类型:object(包括Object,Array,Function,自定义类型等)

2)不区分基本类型和引用类型 数据类型包括:number/string/boolean/null/undefined/object