本文详解JavaScript中对象的两种定义方式,探讨对象转换为字符串时的默认行为,并重点解析如何利用eval函数结合for-in循环动态获取对象属性值,以及将服务端返回的JSON格式字符串转换为可操作对象的方法。
JavaScript对象定义方式
在JavaScript中,创建对象实例通常有两种常见写法。
具体实现代码如下:
<!--Add by oscar999-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Author" CONTENT="oscar999">
<script>
var obj = new Object();
obj.key = "11";
alert(obj.key);
</script>
</HEAD>
<BODY>
</BODY>
</HTML> 另一种更简洁的写法是使用对象字面量。
具体实现代码如下:
<!--Add by oscar999-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Author" CONTENT="oscar999">
<script>
var obj = {};
obj.key = "11";
alert(obj.key);
</script>
</HEAD>
<BODY>
</BODY>
</HTML> 在定义对象字面量时,还可以直接初始化键值对。
var obj = {key:'11'};
对象与字符串转换及eval应用
接下来讨论如何将对象转换为字符串。
如果直接调用对象的toString方法:
具体实现代码如下:
obj.toString() 得到的结果通常是 [object Object] 这样的字符串。
从第二种定义方式(var obj = {key:'11'};)可以看出,JavaScript对象对应的字符串形式是一对大括号包裹着一系列键值对。
这实际上就是JSON的数据格式,如果不熟悉,建议学习一下JSON格式规范。
采用以下方式即可提取obj中的key和value。
具体实现代码如下:
<!--Add by oscar999-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Author" CONTENT="oscar999">
<script>
var obj = {attr1:'value1',attr2:'value2'};
for(attr in obj)
{
alert(attr);
alert(eval("obj."+attr));
}
</script>
</HEAD>
<BODY>
</BODY>
</HTML> 这里需要重点解释为什么取值时使用:
具体实现代码如下:
eval("obj."+attr); 而不是直接使用:
具体实现代码如下:
obj.attr 因为obj.attr查找的是obj中key值为attr的value,但obj中并没有名为attr的key。
这里的attr是一个变量,因此需要借助eval函数来动态解析。
String 如何转换为对象
字符串转换为对象
从对象格式可以看出,如果字符串格式定义为JSON格式,就可以直接转换为对象。
对比以下两种定义方式:
具体实现代码如下:
var obj1 = {attr1:'value1',attr2:'value2'};
var obj2 = "{attr1:'value1',attr2:'value2'}"; obj1直接是一个对象,而obj2只是一个字符串。
使用eval(obj2)即可将其转换为对象。
这种用法之所以存在,是因为很多时候我们需要从服务端返回这种字符串供前端处理。