由于JavaScript是弱类型的编程语言,所以我们学习JavaScript的数据类型不是为了定义变量,因为在JS中声明变量不需要指定数据类型,但是我们在给变量赋值的时候,要知道那个具体值的数据类型。
一、概述
JS中的数据类型包括以下几种:
- Undefined
包括的具体指如下:undefined - String
包括的具体指如下:’a’、”a”、’abc’、”abc”…… - Number
包括的具体指如下:1、16、3.3、NaN、Infinity…… - Boolean
包括的具体指如下:true、false - Object
包括的具体指如下:new Object()、new Date()、new Employee()、null……
二、typeof运算符
- JS中的typeof运算符非常重要,它可以在程序运行阶段动态判断变量的数据类型
- typeof运算符的使用规则:typeof 变量名、typeof(变量名)
- typeof运算符的运算结果是以下六种结果之一:”undefined”、”string”、”number”、”boolean”、”object”、”function”
<script type="text/javascript">
var ename = "smith";
alert("typeof(ename)="+typeof(ename));//typeof(ename)=string
function sum(a,b){
if(typeof(a)!="number"||typeof(a)!="number"){
alert("参数必须是数字类型");
return;
}
return a+b;
}
sum();
sum("a","b");
sum(1,2);
</script>
三、Undefined数据类型
JS中的变量若只有声明而没有显式的赋值,系统默认赋值undefined。
注意:undefined跟’undefined’、”undefined”是不一样的。
<script type="text/javascript">
var ename;
alert("ename="+ename);
if(ename=='undefined'){
alert("ename=='undefined'");//不执行该分支
}
ename = undefined;
alert("ename="+ename);
</script>
四、String数据类型
- JS中没有字符类型,只有字符串类型
- JS中的字符串可以使用单引号包裹,也可以使用双引号
- 字符串这种数据类型又被称为“字符串对象”,但字符串对象不属于Object类型
- 字符串对象的常用属性:length
- 字符串对象的常用方法:toUpperCase()、toLowerCase()、substr()、substring()、replace()
- 利用prototype属性给String类型的数据动态扩展方法和属性
<script type="text/javascript">
var ename = "abcde"
alert("ename.length="+ename.length);//ename.length=5
//利用prototype属性给String类型的数据动态扩展方法和属性
String.prototype.trim = function(){
//前空白的正则表达式:/^\s+/
//后空白的正则表达式:/\s+$/
//JS中正则表达式的格式:/.../
return this.replace(/^\s+/,"").replace(/\s+$/,"");
}
ename = ename.trim();
alert("ename="+ename);//ename=abcde
ename = ename.toUpperCase();
alert("ename.toUpperCase()="+ename);//ename.toUpperCase()=ABCDE
ename = ename.toLowerCase();
alert("ename.toLowerCase()="+ename);//ename.toLowerCase()=abcde
//2是起始下标,3是长度
value = ename.substr(2,3);
alert("ename.substr(2,3)="+value);//ename.substr(2,3)=cde
//2指的是起始下标,3指的是结束下标(3不包括在内),[2,3)
value = ename.substring(2,3);
alert("ename.substring(2,3)="+value);//ename.substring(2,3)=c
//只替换第一项
alert("1990-01-01".replace("-",","));//1990,01-01
//全部替换需要使用正则表达式
alert("1990-01-01".replace(/-/g,","));//1990,01,01
</script>
五、Number数据类型
- JS中不管是整数还是小数,都属于Number数据类型
- 当表达式中有数字参与,但表达式却无法正常计算的时候,计算结果就是NaN
- Infinity表示无穷大,当表达式的运算结果为无穷大时,那结果就是Infinity
- 重要函数:isNaN(数据),它用来判断数据是否是一个数字,不是数字返回true,是数字返回false
- 常用函数:parseInt()、parseFloat()
<script type="text/javascript">
var num = 10;
alert("typeof(num)="+typeof(num));//typeof(num)=number
var num = 10.2;
alert("typeof(num)="+typeof(num));//typeof(num)=number
num = NaN;
alert("typeof(num)="+typeof(num));//typeof(num)=number
num = Infinity;
alert("typeof(num)="+typeof(num));//typeof(num)=number
//什么时候执行结果是NaN?
var a;
var b=2;
var c = a+b;
alert("c="+c);//c=NaN
//重要的函数:isNaN(数据),它用来判断数据是否是一个数字,不是数字返回true,是数字返回false
alert(isNaN(c));//true
alert(isNaN("abc"/2));//true
alert(isNaN(10/2));//false
//什么时候执行结果是Infinity?
//Infinity表示无穷大,除数是0的时候,结果一定是Infinity
var retValue = 10/0;
alert(retValue);//Infinity
//parseInt()函数
var price = "100";
price = parseInt(price);
alert(price + 1);//结果:101
price = "3.9";
price = parseInt(price);
alert(price + 1);//结果:4(不是四舍五入)
//parseFloat()函数
price = "3.95";
price = parseFloat(price);
alert(price);//3.95
</script>
六、Boolean数据类型
- Boolean数据类型只有两个值:true、false
- Boolean类型的数据主要用在逻辑运算或条件控制语句中
- JS中=、==、===的区别
=表示赋值;==只比较值;===既比较值也比较数据类型
<script type="text/javascript">
var flag = true;
alert("typeof(flag)="+typeof(flag));//typeof(flag)=boolean
flag = false;
alert("typeof(flag)="+typeof(flag));//typeof(flag)=boolean
flag = 1;
alert("typeof(flag)="+typeof(flag));//typeof(flag)=number
//=赋值、==只比较值、===既比较值也比较数据类型
var a = true;
var b = true;
alert(a==b);//true
alert(a===b);//true
a = true;
b = 1;
alert(a==b);//true
alert(a===b);//false
</script>
七、Object数据类型
- JS也是面向对象的编程语言,自定义的类默认继承的父类是Object
- JS中声明函数就表示定义了一个类,函数名就是类名,函数本身又是构造函数,函数的声明和类的定义混合完成
- 利用普通函数也可以创建对象,只不过这样的对象既没有属性也没有方法
<script type="text/javascript">
var obj = new Object();
alert("typeof(obj)="+typeof(obj));//typeof(obj)=object
obj = null;
alert("typeof(obj)="+typeof(obj));//typeof(obj)=object
var ename = "SMITH";
function sayHello(){
alert("Hello:"+ename);
return "aaa";
}
var obj = new sayHello();
var returnValue = sayHello();
alert("obj="+obj);//obj=[object Object]
alert("returnValue="+returnValue);//returnValue=aaa
</script>
- 定义类的第一种方式,一般function关键字放在前边的写法用来定义函数
<script type="text/javascript">
//【定义类的第一种方式】
function User(id,name){
//属性(必须加this.)
this.id = id;
this.name=name;
//方法(必须加this.)
this.shopping = function(){
alert(this.name+" is shopping......");
}
//类中方法的错误写法1
//working = function(){
// alert(this.name+" is working......");
//}
//类中方法的错误写法2
//function working(){
// alert(this.name + " is working...");
//}
}
var user = new User();
user.shopping();
//user对象中的id属性、name属性默认值是undefined
alert("user.id="+user.id);//user.id=undefined
user = new User(16,"guoguo");
user.shopping();
alert("user.id="+user.id);//user.id=16
</script>
- 定义类的第二种方式,一般函数名(类名)放在前边的写法用来定义类
<script type="text/javascript">
//【定义类的第二种方式】
Employee = function(id,name){
//属性(必须加this.)
this.id = id;
this.name=name;
//方法(必须加this.)
this.working = function(){
alert(this.name+" is working......");
}
}
var employee = new Employee(6,"guoguo");
employee.working();
alert("id="+employee.id+",name="+employee.name);
//Object中有prototype属性,所以子类Employee才能使用prototype
//动态扩展Employee类中的方法
Employee.prototype.signIn = function(){
alert(this.name + " has sign in......");
}
//必须先定义扩展方法,然后才能调用扩展方法
employee.signIn();
</script>