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