4.1.3使用javascript对象
每个javascript对象都有一个相关属性和方法的集合,利用这些方法和属性来操作数据。比如,array 对象包含一些方法和属性,用于操作数组或者从数组中检索信息。
创建对象
var myArray = new Array( );
即使用 var 关键字定义了一个名字myArray 的变量,右侧,new 运算符告诉javascript 将要创建一个新对象,接着是 Array ()函数,他说明了我们要创建的是哪一种对象。
一个变量,存储一个对象和存储一个基本数据类型的数据有什么不同?
当存储的是基本数据类型时,变量中保存的实际值。而当把某个对象赋值给变量时,变量中并不保存对象中的实际数据,只保存一个指向该对象数据的内存地址。但不可以操作内存地址。即对象赋值给变量时,变量保存的是一个对内存地址的引用。
var myarray = new Array(0,1,2);
var mesecondarray= mrarray;
myarray[0]=100;
alert(mysecondarray[0]);
这样输出是100. 上述代码,首先把变量myarray 的值设置为一个新的数组对象,然后把变量mysecondarray 的值设置为变量myarray的值,使得两个变量引用同一个数组。
当吧myarray 的值赋值给mysecondarray 时,并不会把myarray 引用的数组复制到变量中,而是把自己的引用复制到变量中。
对象的属性,通过一个点号来引用(.)比如 myarray.length
调用对象的方法
比如 myaray.sort( )
判断首字母大小的函数:用到mystring.charAt( ),来读取首字母。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" >
function checkCharType(mystring){
//-------错误一:把函数用var来定义,出错,函数应该是function-------
var firstChar = mystring.charAt(0);
if(firstChar <="Z" && firstChar >= "A")
return("u");
else if(firstChar>="a"&& firstChar<="z")
return("l");
else if(firstChar>="0"&& firstChar<="9")
return("n");
else return("f");
}
</script>
</head>
<body>
<script type="text/javascript">
var mystring=prompt("enter some text");
switch (checkCharType(mystring)){
case "u": //--------错误三: 写为case("u"): 错误!!------------
document.write("the first character was upper");
break; //----错误二:在switch语句中没有break,会继续向下执行--------
case "l":
document.write("the first character was upper");
break;
case "n":
document.write("the first character was a number");
break;
case "f":
document.write("the character was not a number or string");
break;
}
</script>
</body>
</html>
但是在 checkCharType 函数里使用了四个return ,使函数的执行流难以判断,可以修改为先定义一个 returnValue ,通过改变它的值,最后返回 returnValue。修改后:
<script type="text/javascript" >
function checkCharType(mystring){
//-------错误一:把函数用var来定义,出错,函数应该是function-------
var firstChar = mystring.charAt(0);
var returnValue="f";
if(firstChar <="Z" && firstChar >= "A")
returnValue="u"; // return("u");
else
if(firstChar>="a"&& firstChar<="z")
returnValue="l"; //return("l");
else
if(firstChar>="0"&& firstChar<="9")
returnValue="n"; //return("n");
else returnValue="u"; //return("f");
return returnValue;
}
</script>
indexOf(searchString,startPosition ) 和 lastIndexOf( )[ps lastIndexOf() 在字符串结尾或指定位置从后向前查找]
查找子串在字符串中的位置,返回位置,如果找不到字串,返回-1.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
var mystring = prompt("enter some text");
var position =0;
var i=0;
while(position != -1){
position= mystring.indexOf("o",position);//--------查找字母o 有几个---------
if(position!=-1){
i++;
position++;
}
}
document.write("there are "+ i+ "")
</script>
</body>
</html>
substr() 和 substring() -------复制字符窜的一个子串
var mystring="javascript";
var mysubstring=mystring.substring(0,4);//----起始位置0,结束位置4 ps:结束位置不包含在子串中----
alert(mysubstring);//-----输出Java------
PS: 区别 substr( start, length) ;substring(strat, end)
toLowerCase() 以及toUpperCase() 转换大小写
mystring.toLowerCase();-----转化为小写字符串------
Math
随机输出1-6的6个数字。
Math.random()
是0-1之间随机数,不包含1.如果想要1-100之间的随机数,只需要math.random()*100 即可。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
var i=0;
var diceThrow;
for(i=0;i<6;i++){ //-----6个数字-------
diceThrow=Math.floor(Math.random()*6+1);
//---------Math.random(),1-0之间的随机数,Math.random()*6,0-6之间随机数。加1,7-0之间的随机数,floor(),则取整-----------
document.write(diceThrow+"</br>");
}
</script>
</body>
</html>
其中 Math.floor(number ) 表示对number向下取整。
sort()方法-------对数组进行排序
数组中有相同类型数据时,例如数组的元素是一个名字列表或者年龄列表时面可以按照字母表升序或者数字大小来排列数组中的元素。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
var myarray = new Array(10,4,67,34);
for(i=0;i< myarray.length;i++){
document.write(myarray[i]+",");
}
myarray.sort();//-----对myarray数组进行排序------
var i;
document.write("<br>排序之后:<br>")
for(i=0;i< myarray.length;i++){
document.write(myarray[i]+",");
}
</script>
</body>
</html>
但是可以看到排序输出,排序只是按照第一个数字的大小而不是数值大小排序的。
join()-------将数组转化为字符串
myarray.join("<br/>")
join 后面的参数是数组元素之间连成字符的间隔符。