首页 理论教育JavaScript对象介绍及环形对象引发的错误

JavaScript对象介绍及环形对象引发的错误

【摘要】:图8.1.1对象介绍JavaScript的对象有以下三个特点:◇ 对象可以组织任意类型的数据。动手写8.1.3执行8.1.3.html,打开浏览器控制台,查看环形对象的结构,使用JSON.stringify()序列化环形对象时触发错误“Uncaught TypeError: Converting circular structure to JSON”,如下图所示。图8.1.3递归对象提示环形对象是一种无限循环结构,使用时要特别小心,避免出现不合理的递归访问,造成网页崩溃。

JavaScript对象是最常用的引用类型数据。对象包含多种类型的数据,通过属性访问对象的数据成员。对象既是对现实世界的抽象,又是根据抽象定义的实例。对象的属性值支持任意数据类型,但最终被转换为字符串。

8.1.1.html定义一个代表数学老师的对象,并且拥有开始讲课startLecture方法,如下所示。

动手写8.1.1

执行8.1.1.html,输出数学老师的所有属性到网页,最后执行startLecture,输出“开始讲课”提示,如下图所示。

图8.1.1 对象介绍

JavaScript的对象有以下三个特点:

◇ 对象可以组织任意类型的数据。

◇ 对象属性值是字符串,为对象设置非字符串的属性,该属性名称会被转换为字符串。

◇ 对象不能进行排序,但使用for循环获取对象属性的顺序与设置属性的顺序一致。

虽然JavaScript语法没有要求对象属性的格式,但大部分情况下对象的属性名称是合法的标识符,这样方便获取和使用存取操作符点号(.)所设置和获取的对象属性值。

1.转换属性名称为字符串

对象的属性都是字符串,为对象设置非字符串的属性时,该属性名称会被转换为字符串。

8.1.2.html将一个对象设置为另一个对象的属性名,如下所示。

动手写8.1.2(www.chuimin.cn)

执行8.1.2.html,输出结果到网页,如下图所示。

图8.1.2 对象属性名自动转换为字符串

设置和获取对象成员时,如果属性值不是字符串,依次尝试调用属性值的toString()和valueOf(),直到其中一个函数返回原始值;如果无法获取原始值,则触发错误“Uncaught TypeError: Cannot convert object to primitive value”。

2.环形对象

对象包含的数据可以是任意数据,甚至包含自身,包含自身的对象也被称为环形对象。JavaScript的对象能够通过函数JSON.stringify()序列化成字符串,使用JSON.parse()又可以将字符串反序列化成对象,而获取环形对象的属性会造成无限循环,因此无法将环形对象序列化成字符串。

8.1.3.html将对象设置为自身的属性值,形成环形对象,如下所示。

动手写8.1.3

执行8.1.3.html,打开浏览器控制台,查看环形对象的结构,使用JSON.stringify()序列化环形对象时触发错误“Uncaught TypeError: Converting circular structure to JSON”,如下图所示。

图8.1.3 递归对象

提示

环形对象是一种无限循环结构,使用时要特别小心,避免出现不合理的递归访问,造成网页崩溃。