JavaScript中的类型可以简单地概括:相对于其他的强类型语言来说,它是弱(松散)类型的语言,分别有基本类型和引用类型。区别在于一个有个固定空间保存在栈内存中,一个没有固定空间保存在堆内存并且在栈内存保存了一个指向实现位置的指针。
一、基本类型:Undefined、Null、Boolean、Number、String类型;当基本类型初始化后,就不能更改变量的值了,因为基本类型是按值来访问的。如下代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "HTTP://WWW.W3.ORG/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html"; charset="utf-8" />
<title>基本类型</title>
<script>
<!--定义变量的初始值,全局变量-->
var a = 1;
//b定义为Boolean类型
var b = true;
//c为字符串,String类型
var c = 'afdgg';
fuction f(){
//d虽然是在函数中,可是此时属于全局变量
d = 4;
}
alert("a=" + a);
alert("b="+b);
alert("c="+c);
f();
alert("d1="+d);
</script>
</head>
<body></body>
</html>
二、引用类型:Object、Array、Function、Date、Map、Error等等,除开基本类型,其他都可以说是引用类型了;引用类型可以拥有属性和方法,属性又可以包含基本类型和引用类型。
① Object引用类型:一切事物皆对象,所以此类型成为引用类型的精髓。用代码说话:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "HTTP://WWW.W3.ORG/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html"; charset="utf-8" />
<title>引用类型之Object</title>
<script>
/*没有对象的朋友是不是该去找个对象,所以对于Object也需要给它
* new一个对象,然后再调用它的方法
*/
var obj = new Object();
//实例化对象
var obj = { };
//给对象设置属性
obj.name='aaa';
obj.sex = '男';
obj.age = 20;
obj.say = function(){
alert('hellow word!!!');
}
alert("name =" + obj.name);
//没加delete的age的值
alert("age =" + obj.age);
//delete操作符 删除对象或方法的值
delete obj.age;
//区分加delete属性后age的变化
alert("age1 =" + obj.age);
alert("say =" + obj.say);
</script>
</head>
<body></body>
</html>
当想要遍历js的对象,那又该怎么去遍历呢,用for循环?那就错了,js是用for….in语句遍历的,代码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "HTTP://WWW.W3.ORG/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html"; charset="utf-8" />
<title>引用类型之Object</title>
<script>
var obj = new Object();
var obj = { };
obj.name='aaa';
obj.sex = '男';
obj.age = 20;
obj.say = function(){
alert('hellow word!!!');
}
//for....in语句遍历
for(var attribute in obj){
alert(attribute+" = "+obj[attribute]);
}
</script>
</head>
<body></body>
</html>
Object每个实例都会具有下列属性和方法:
Constructor: 保存着用于创建当前对象的函数。(构造函数)
hasOwnProperty(propertyName):用于检测给定的属性在当前对象实例中(而不是原型中)是否存在。返回Boolean值
isPrototypeOf(Object): 用于检查传入的对象是否是另外一个对象的原型。
propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举。返回Boolean值
toLocaleString():返回对象的字符串表示。该字符串与执行环境的地区对应.
toString():返回对象的字符串表示。
valueOf():返回对象的字符串、数值或布尔表示。
②Map引用类型:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "HTTP://WWW.W3.ORG/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html"; charset="utf-8" />
<title>引用类型之Map</title>
<script>
function Map(){
var obj = { };
//put方法
this.put = function(key,value){
obj[key] = value;
}
//size方法
this.size = function(){
var count = 0;
for(var f in obj){
count++;
}
return count;
}
//get方法
this.get = function(key){
if(obj[key] || obj[key] === 0 || obj[key] ===false){
return obj[key];
}else{
return null;
}
}
}
var m = new Map();
m.put('1',5);
m.put('2',new Date());
m.put('3',true);
m.put('4',0);
alert(m.size());
alert(m.get('4'));
</script>
</head>
<body></body>
</html>
③数组:js中的数组类似java中的Map容器,长度任意改变,元素类型任意,一般方法有如下几种:
push方法向数组中追加元素(返回值为数组新的长度),
pop:从数组的尾部移除一个元素(返回值为移除的元素);
shift:从头部移除一个元素,返回移除后的元素
unshift:从头部插入多个元素,返回新数组的元素个数
splice,slice方法(截取方法),splice方法操作数组的本身,第一个参数:起始位置,第二个参数:表示截取的个数,
第三个参数以后:表示追加的锌元素个数,而slice方法不操作数组的本身;
concat:合并粘连的操作(不操作数组的本身);
joinsort:在每个元素之间加入内容(不操作数组本身);
reverse:按照集合的位置进行倒叙;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>damo3</title>
<script type=text/javascript charset=utf-8>
//创建数组
//var arry = new Array();
//方法②
//var arr1 = [new Array(),1,2,3,true,'sfdgdg',new Date()];
//alert(arr1.length);
//arr1.length = 7;
//alert(arr1); //相当于调用toString方法。
/**
*常用的方法有
*push方法向数组中追加元素(返回值为数组新的长度),
pop:从数组的尾部移除一个元素(返回值为移除的元素)
*shift,unshift
*splice,slice
*concat,join,sort,reverse等
*/
//var a = [new Date(),3,5,6,5,8,9];
//var a1 = a.push(1,2,3,4);
//alert(a);
//alert(a1);
//var a2 = a.pop(); //从数组的尾部移除一个元素(返回值为移除的元素)
//alert(a2);
//shift,unshift
//var a = [1,2,3,4,5,6];
//a.shift(); //从头部移除一个元素,返回移除后的元素
//alert(a);
//a.unshift(9); //从头部插入多个元素,返回新数组的元素个数
//alert(a);
//splice,slice方法(截取方法)
//splice方法操作数组的本身
//slice方法不操作数组的本身
//splice:第一个参数:起始位置,第二个参数:表示截取的个数,第三个参数以后:表示追加的新元素个数
var a = [1,2,3,4,5,6];
//a.splice(1,2,3,4,5);
//alert(a);
var a1 = a.slice(3,5); //截取范围(左闭右开区间)
//alert(a1); //返回截取的内容
//concat,join
var b = [1,2,3,4,5,6];
var b1 = [true,1,2];
var b2 = b.concat(b1); //合并粘连的操作(不操作数组的本身)
//alert(b2);
var b3 = b.join('-'); //在每个元素之间加入内容(不操作数组本身)
//alert(b3);
//sort:正序
//reverse:倒叙
var c = [9,2,0,4,5];
var c2 = [7,8,9,ture];
c.sort();
alert(c);
c2.reverse(); //按照集合的位置进行倒叙
alert(c2);
</script>
</head>
<body>
</body>
</html>
④函数。是通过function来定义的,具体请看以上的例子。
所以,引用类型都具有以下几个特性:
1、引用类型的值是可变的;
2、引用类型的值是同时保存在栈内存和堆内存中的对象;
3、引用类型的比较是引用的比较;
4、简单赋值;
5、对象引用。
完毕!!!