首页 技术 正文
技术 2022年11月21日
0 收藏 312 点赞 3,288 浏览 3070 个字

  在这篇文章里,我们讨论一下JavaScript中的对象、数组以及错误处理。

  1. 对象

  对象是JavaScript中的一种基本类型,它内部包含一些属性,我们可以对这些属性进行增删操作。

  1.1 属性

  JavaScript中的值,有时会包括一些与其相关联的值,这些相关联的值,我们称之为属性。

  访问属性

  下面是一个非常简单的示例:

         var a = "this is test";
print("type of a:" + typeof a);
print(a["length"]);
print(a.length); //输出结果
type of a:string
12
12

  上述代码中,第3行和第4行的作用是一样的,都是输出a的长度。我们可以看到a是string类型的变量,它包含了一个名为length的属性,这个属性可以返回字符串的长度。当需要调用属性时,我们可以使用”变量名[属性名称]”的方式,也可以使用“变量名.属性名称”的方式。后者是前者的一个简写形式。

  但是当属性命名以数字等开头时,我们只能以“[]”的形式来引用,例如:

     var temp={"1":"a", "2":"b", "3":"c"};
print(temp["1"]);
//print(temp.1);

  上述代码最后一行如果不注释掉,就会发生错误,因为“1”不符合JavaScript变量的命名规则。

  在JavaScript中,对象由一个属性集合构成,每个属性的值还可以是一个属性集合,以此类推。

  删除属性

  当我们试图访问一个不存在的属性时,会返回undefined,我们可以通过delete操作来删除。另外我们可以使用in操作来判断属性是否存在。

  来看下面的示例:

     var temp={"1":"a", "2":"b", "3":"c"};
print(temp["1"]);
print("\'1\' in temp:" + ("1" in temp));
delete temp["1"];
print(temp["1"]);
print("\'1\' in temp:" + ("1" in temp)); //输出结果
a
'1' in temp:true
undefined
'1' in temp:false

  可以看到,在使用了delete操作后,属性已经被删除了。

  遍历属性

  对于我们在程序中添加的属性,是可以通过循环的方式进行遍历的:

     var temp={"1":"a", "2":"b", "3":"c"};
for(var name in temp){
print("temp["+name+"]="+temp[name])
}
print(temp); //输出结果
temp[1]=a
temp[2]=b
temp[3]=c
[object Object]

  非常有意思的是直接print对象时,输出的是[object,object]。

  1.2 修改对象

  JavaScript中也有值类型和引用类型之分,我们可以通过修改对象中属性的值来改变对象。

  来看下面的示例:

     var a={"start":10};
var b=a;
var c={"start":10};
print("a==b:" + (a==b));
print("a==c:" + (a==c));
print("a.start:" + a.start);
print("b.start:" + b.start);
print("c.start:" + c.start);
a.start=20;
print("a.start:" + a.start);
print("b.start:" + b.start);
print("c.start:" + c.start); //输出结果
a==b:true
a==c:false
a.start:10
b.start:10
c.start:10
a.start:20
b.start:20
c.start:10

  2. 数组

  我们可以把对象看做是一个实体模型,它内部包含的信息作为属性存在。如果需要表示多个实体模型时,我们可以考虑使用集合。

  我们使用”[]”来定义数组,来看下面的示例:

 function arrayTest(){
var temp=["a","b","c"];
temp.push("d");
temp.push("e");
for(var i = 0; i < temp.length; i++){
print(temp[i]);
}
} //输出结果
a
b
c
d
e

  我们有两种方式向数组中添加元素:1)初始化数组时;2)使用push方法。

  我们可以使用join方法将数组转换成一个字符串,也可以使用split方法将一个字符串转换成字符串数组,如下:

     var temp=["a","b","c"];
temp.push("d");
temp.push("e");
print(temp.join(" "));
print(temp);
var a="a b c d e";
print(a.split(" ")); //输出结果
a b c d e
a,b,c,d,e
a,b,c,d,e

  可以看到当我们直接print数组时,它输出了数组中的每一个元素,但我们print对象时,它并没有输出对象中的属性。

  3. 错误处理

  在编写程序时发生的错误可以分为两类:程序员错误和运行时错误。

  对于程序员错误的处理策略,我们通常是期望程序尽快出错,这样可以弄清楚哪里出了问题。同时我们也可以采取防御性编程,例如添加输入检查。

  对于运行时错误,我们应该尽量对错误进行处理,例如回滚,尽量避免程序崩溃。

  3.1 处理错误的方式

  在JavaScript中,我们有几种方式可以用来处理错误。

  返回特殊值

  对于不符合业务逻辑的输入,我们可以返回一个特殊值,例如undefined,这样可以提示用户方法的返回值是不正常的。

  例如我们在JavaScript学习(1):基础中提到的学习成绩分类的示例,对于输入的分数大于100或者小于0的情况,明显不符合正常的业务,我们可以返回undefined。

  这种错误处理方式的坏处:1)如何确定特殊的返回值,如果undefined在某种情况下也是正常业务的返回值,那么我们如何处理?2)需要函数的调用方知道特殊的返回值,并且在每次调用的时候,对特殊返回值进行处理。

  异常

  我们可以通过throw、try…catch的方式来实现异常处理,下面是一个简单示例:

 function divide(a,b){
if (b == 0) throw "can not divide 0";
return a/b;
} function errorTest(){
try{
divide(1,0);
}
catch(error){
print("error occurs:" + error);
}
} //输出结果
error occurs:can not divide 0

  我们可以自定义Error对象,这样在catch时,可以更加细化的处理指定的异常。如下示例:

 var zeroError = new Error("can not divide 0"); function errorTest(){
try{
throw new Error("test");
divide(1,1);
}
catch(error){
if (error==zeroError){
print("error occurs:" + error.message);
}
else{
print(error.message);
}
}
} //输出结果
test

  我们可以在catch后面添加finally语句,和Java一样,可以在finally语句中释放资源,恢复业务状态等操作。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,986
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,502
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,346
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,129
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,764
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,841