JS包括哪些数据类型
原始类型:Undefined、Number、String、Boolean、Null
引用类型:Object以及Object的子类
前六种在ES6之前有,ES6之后多了个Symbol类型
另外:
JS中有一个运算符叫typeof
这个运算符可以在程序运行阶段动态获取变量的数据类型
typeof运算符的语法格式:
type 变量名
typeof运算符的运算结果是以下六个字符串之一,全部小写
"undefined"
"number"
"string"
"boolean"
"object"
"function"
在JS中比较字符串是用双等号“==”
Undefined类型
Undefined类型只有一个值:undefined
当一个变量没有手动赋值,系统默认赋值undefined
<body>
<script type="text/javascript">
var i;
var j= undefined;
alert(i==j);//true
var k="undefined";//字符串
alert(j==k);//false
</script>
</body>
Number类型
- Number类型包括哪些值?
-1 1 2 3.1 3.14 NaN Infinity…
整数、小数、不是数字、无穷大都属于Number类型 - isNaN(数据),结果是true表示不是一个数字,false表示是一个数字
- parseInt() 函数,将字符串转换成数字,并且取整数位
- parseFloat() 函数,将字符串转换成数字
- Math.ceil() 函数,向上取整
<body>
<script type="text/javascript">
var v1=1;
var v2=3.14;
var v3=-100;
var v4=NaN;
var v5=Infinity;
//关于NaN 表示:Not a Number,不是数组,但属于Number类型
//什么情况下结果是NaN?运算结果本来是数字,但最后算完不是数字,结果是NaN
var a=100;
var b="中国人";
alert(a/b);//NaN
var c="abc";
var d=10;
alert(c+d);//"abc10"加号两边如果有字符串,会进行字符串拼接
//Infinty 当除数为0的时候,结果为无穷大
alert(10/0);//Infinty
//isNaN()
//用法:isNaN(数据),结果是true表示不是一个数字,false表示是一个数字
function sum(a,b){
if(isNaN(a)||isNaN(b)){
alert("参与运算的必须是数字")
return;
}
return a+b;
}
</script>
</body>
Boolean类型
- JS中的布尔类型永远都只有两个值:true/false
- 在Boolean类型中有一个函数叫Boolean()
语法格式:
Boolean(数据)
Boolean()函数的作用是将非布尔类型转换成布尔类型
规律:有就是true,没有就是false
<body>
<script type="text/javascript">
var username="jack";
if(username){//这里Boolean()可以省略,自动转换成Boolean类型
alert("欢迎你"+username);
}else{
alert("用户名不能为空");
}
</script>
</body>
String类型
- 在JS中字符串可以用单引号,也可以使用双引号
- 在JS中,怎么创建字符串对象?
两种方式:
第一种:var s=“helloworld”;
第二种(使用内置支持类):var s2=new String(“abc”);
String是一个内置的类,可以直接用,String的父类是Object - 无论是小string还是大Strng,他们的属性和函数都是通用的
- 关于String类型的常用属性和函数
length属性:获取字符串长度
常用函数:
indexOf 获取指定字符串在当前字符串中第一次出现处的索引
lastIndexOf 获取指定字符串在当前字符串中最后一次出现处的索引
replace 替换(只替换第一次出现的字符串)
substr 截取子字符串
substring 截取子字符串
toLowerCase 转小写
toUpperCase 转大写
split 拆分字符串
<body>
<script type="text/javascript">
//小string(属于原始类型String)
var x="abc"
alert(typeof x);//"string"
//大String(属于Object类型)
var y=new String("abc");//"object"
alert(typeof y);
//获取字符串的长度
alert(x.length);//3
alert(y.length);//3
//字符串替换
alert("123abc789".replace("abc","456"));
</script>
</body>
关于substr和subtring的区别(重要)
substr(初始下标,长度)
substr(出示下标,结束下标)不包含结束下标
<script type="text/javascript">
//substr(startIndex,length)
alert("abcdef".substr(2,4));//cdef
//substr(startIndex,endIndex)注意:不包含endIndex
alert("abcdef".substring(2,4));//cd
</script>
Object类型
- Object类型是所有类型的超类
- Object类包括哪些属性?
prototype属性(常用):给类动态的扩展属性和函数(重点)
constructor属性 - Object类包括哪些方法?
toString();
valueOf();
toLocaleString(); - 在JS中怎么定义类?怎么new对象?
定义类的语法:
第一种:function 类名(形参){
}
第二种:类名=function(形参){
}
创建对象的语法:
new 构造方法名(实参);//构造方法名和类名一致
例如:
User=function(username,userid){
this.username=username;
this.userid=userid;
}
var u1=new User();
var u2=new User(“zhangsan”);
var u3=new User(“lisi”,“123”);
<body>
<script type="text/javascript">
function sayHello(){
}
//把sayHello当做函数:
sayHello();
//把sayHello当做类来创建对象:
var obj = new sayHello();
//JS中类的定义,同时也是构造函数的定义
function User(a,b,c){//a,b,c表示形参
this.sno=a;
this.sname=b;
this.sage=c;
//函数
this.getSname=function(){
return this.sname;
}
}
//创建对象
var u1=new User(111,"zhangsan",12);
alert(u1.sno);
alert(u1.sname);
alert(u1["sage"]);//也可以这样访问属性
alert(u1.getSname());
//可以通过prototype这个属性给类动态扩展函数(重点)
User.prototype.getSage=function(){
return this.sage;
}
//调用后期扩展的getSage()函数
var sage=u1.getSage();
alert(sage);
//给String扩展一个函数
String.prototype.hanshu=function(){
alert("给String类扩展的函数,叫hanshu")
}
"abc".hanshu();
</script>
</body>
Null类型
Null(空值)类型的值只有一个,就是null
使用typeof检查一个null值时,会返回object