1、数据类型分类
JavaScript 的数据类型共分为六大类,五大 简单数据类型(也称为基本数据类型)和复杂数据类型(也称为引用数据类型)。
······在计算机中,不同的数据存储所需容量不同,不同数据类型对应业务也不一样。为了充分利用内存空间,区分不同业务,于是将数据分为不同的类型。
······JavaScript的数据类型为弱类型,即最开始的时候并不知道变量是什么类型,必须通过后面的值才能知道,也就意味着不用提前声明变量的类型,在程序运行过程中,类型会被自动确定。
(1)基本(简单)数据类型
基本(简单)数据类型 | 举例 | typeof 返回的值 |
---|---|---|
Number | 数字(正负数、小数、0)、infinity(无穷大)、NaN(not a number:不是一个数字)、小数的舍入误差 | ’ number ’ |
String | 单双引号裱起来的0个或多个字符(如:“ 哈哈 ”,’ 哈哈 ’ ),有长度、下标并且可以通过下标获取下标相对应位置的字符 | ’ string ’ |
Boolean | true为真 / false | ’ boolean ’ |
Null | “空值” ,代表一个空对象指针,使用typeof运算得到object,可认为其是一个特殊的对象值 | ’ object ’ |
Undefined | 未定义,声明了但未赋值(如:var a | ’ undefined ’ |
<1>Number—数字类型
数字类型即数值类型,主要作用是存储数据,参与数学运算。
我们这里大体讲基本数值(所有的数值都是 number 类型,包含整数,小数,负数);
·····················进制数值(在计算机中,常见的机制有二进制、八进制、十进制、十六进制。都是属于 number 类型数值。)
·····················特殊数值(例如NaN、无穷大、小数的舍入误差)。
进制数值
在 JavaScript 中不需要进行进制换算,只需要了解以 0 开头并且没有超过 8 的值,为八进制,0x 开头为十六进制即可。
//八进制基数范围 0~7,以 0 开头并且没有超过 8 的值,则为八进制
var num1 = 010; //number 对应十进制 8
var num2 = 070; //number 对应十进制 56
var num3 = 020; //number 对应十进制 16
//十六进制基数范围 0-9,A~F,0x 开头,则为十六进制
var num5 = 0x10;
console.log(num5, typeof num5); //16 number
正负数、0、小数都是数字
var a = 10; //正数
console.log(a);
console.log(typeof(a));
var b = -6; //负数
console.log(b);
console.log(typeof(b));
var c = 0; //0
console.log(c);
console.log(typeof(c));
var d = 12.5; //小数
console.log(d);
console.log(typeof(d));
无穷大、小数的舍入误差(小数相加会有一点误差)都是数字
var e = 9 / 0; //无穷大
console.log(e);
console.log(typeof(e));
var f = 0.1 + 0.2; //小数的舍入误差
console.log(f);
console.log(typeof(f));
var g = 0.07 * 100;
console.log(g);
console.log(typeof(g));
NaN是数字(数值)类型
NaN的特点:
················NaN表示非数字,但仍属于数字(数值)类型,表示的是“在执行数学运算时没有成功,而返回的一个失败的结果”。
················任何涉及NaN的 非加法 运算,执行结果都是NaN。
················NaN的 加法 运算,如果有字符串,则进行字符串的拼接;如果都是数值,则进行加法运算。
var h = '小王' + 8; //做加法时,加号一侧只要有字符串,就默认为字符串的拼接
console.log(h);
console.log(typeof(h));
var i = '小王' - 8; //做减法时,减号两侧都要转数字再计算
console.log(i);
console.log(typeof i);
var j = NaN + 8; //NaN和数值之间的运算
console.log(j);
console.log(typeof(j));
var k = NaN + '8'; //NaN和字符串之间的运算
console.log(k);
console.log(typeof(k));
console.log(NaN === NaN); //NaN不等于NaN
<2>String—字符串类型
单双引号引起的0个或多个字符,建议用单引号
//第一种写法
var str1 = ' ' //单引号引起的0个字符
console.log(str1);
console.log(typeof(str1));
var str2 = '成就未来'; //单引号引起的多个字符
console.log(str2);
console.log(typeof(str2));
var str3 = "世界和平"; //双引号引起的多个字符
console.log(str3);
console.log(typeof(str3));
//第二种写法
var str1 = ' '
console.log(str1,typeof str1);
var str2 = '成就未来';
console.log(str2,typeof str2);
var str3 = "世界和平";
console.log(str3,typeof str3);
字符串长度
······格式: 字符串.length···获取当前字符串长度
···
······字符串中,引号内的每个空格和标点符号都算作一个字符。英文状态下,每个字母都算作是一个字符;中文状态下,则是每个字都是一个字符。
······多个字符串之间可以使用 + 进行拼接,用于连成一个字符串。
······数字是没有长度的,打印输出undefined,类型就是undefined。
var str1 = 'This is an apple!';
console.log(str1);
console.log(str1.length);
var str2 = 'This is an apple';
console.log(str2);
console.log(str2.length);
var str3 = '这是一个苹果!';
console.log(str3);
console.log(str3.length);
var str4 = '这是一个苹果';
console.log(str4);
console.log(str4.length);
字符串下标
······格式: 字符串.charAt( 下标 )···或···字符串[ 下标 ];
···
······下标是对字符串中每个字符的一个编号,编号从0开始;
······可以通过下标获取相对应位置的字符,ie7及以下获取到undefined。
var str = '愿世界和平!';
console.log(str);
console.log(str.charAt(2));
console.log(str[5]);
<3>Boolean—布尔类型
······布尔值代表“真”和“假”两个状态,“真”用关键字true表示,“假”用关键字false表示。
······下列运算符会返回布尔值:①前置逻辑运算符,!(Not)
··········································②相等运算符,用来比较两个值是否相等如果相等则返回true,不相等则返回false,例如:全等于===、不全等 !==、不相等 !=、==
··········································③比较运算符,>、>=、<、<=
······JavaScript预期某个位置应该是布尔值时,会将该位置上现有的值自动转换为布尔值。转换规则是除了【undefined】、【null】、【false】、【0】、【NaN】、【 " "或 ’ ’ (空字符串) 】六个值会被转换为false外,其他值都视为true。
······注意,空数组([])和空对象({})对应的布尔值,都是true。
······布尔值往往用于程序流程的控制
var b1 = true;
console.log(b1);
console.log(typeof b1); //打印 b1 的数据类型
var b2 = false;
console.log(b2);
console.log(b1 + b2); //打印 b1 + b2 的值
console.log(typeof(b1 + b2)); //打印 b1 + b2 值的数据类型
延伸:布尔类型一般用在事件判断里面
格式:···if ( 布尔值 ) { }else { }
var age = 5; //小于标准年龄
if (age >= 7){
console.log('该上小学了');
}else{
console.log('去幼儿园吧');
}
var age = 8; //大于标准年龄
if (age >= 7){
console.log('该上小学了');
}else{
console.log('去幼儿园吧');
}
<4>Null 和 Undefined—空和未定义
null与undefined都可以表示“没有”,含义相似。将一个变量赋值为null或undefined,老实说语法效果几乎没有区别。
var a = null;
console.log(a);
console.log(typeof a);
var b = undefined;
console.log(b);
console.log(typeof b);
对于null和undefined,大致可以这样理解:
null表示空值,即该处的值现在为空,也代表一个空对象指针,使用typeof运算得到“object”,所以你可以认为它是一个特殊的对象值。
运用举例:
······调用函数时,某个参数未设置任何值,这时就可以传入null,表示该参数为空。比如,某个函数接收引擎抛出的错误作为参数,如果运行过程中未出错,那么这个参数就会传入null,表示未发生错误。
undefined表示未定义,声明了未赋值,值为undefined。
undefined 是在 ECMAScript 第三版引入的,为了区分空指针对象和未初始化的变量,它是一个预定义的全局变量。
没有返回值的函数返回为 undefined,没有实参的形参也是 undefined。
下面是返回undefined的典型场景:
//声明变量但未赋值
var i;
console.log(i); // undefined
//调用函数时,应提供的参数没有提供,该参数等于undefined
function fn(x){
return x;
}
console.log(fn());
//对象没有赋值的属性
var o = new Object();
console.log(o.p);
//函数没有返回值时,默认返回undefined
function fn(){}
console.log(fn());
null和undefined的区别
undefined:未初始化,访问一个空变量返回的值,声明变量但是未赋值
·
null:空,访问一个空对象返回的值,声明变量赋值但是值为空
·
js源码规定null和undefined相等,即null == undefined为真
(2)引用(复杂)数据类型
引用(复杂)数据类型 | 举例 | typeof 返回的值 |
---|---|---|
Object | 对象类型,万物皆对象,如 { },标签等 | ’ object ’ |
array | 数组类型,存储数据的容器,如 [ 1 , 2 ] | ’ object ’ |
function | 函数function(){},存储代码的块 | ’ object ’ |
2、typeof操作符:检测变量的数据类型
注意:typeof返回的结果,必然是字符串,其结果以字符串的形式显示。
鉴于 ECMAScript 是松散类型的(弱类型),因此需要有一种手段来检测给定变量的数据类型,typeof就是负责提供这方面信息的操作符。
语法格式 : 【typeof ( 参数 );如 typeof (a)】 或 【typeof + 空格 + 参数;如 typeof a】