第一种通过获取
第二种通过[]获取
那什么时候用点获取什么时候[]呢,可以在不同场景使用
两个的相同点:都是获取对象属性值
不同点:
1 [ ]运算符可以使用字符串变量的内容作为属性名,点运算符不能
普通常量赋值的时候可以用点运算符,其他可以用[]运算符,
后台返回的是json字符串,在js里还需要转成json对象才能用
//json字符串
var strJson = '<%=uslist %>';
//转json对象,用eval,当然也可以用json包里的方法或者类库提供的方法(比如jquery)
var objJson = eval('(' + strJson + ')');
递归经常碰到的问题了。
出问题的地方是 Run(temp,path);
既然是递归的调用 而且这个函数本身 有 return 值 那么 你应该在
调用 Run(temp,path);的时候 接收他的返回值
应该写成 value = Run(temp,path);
1 现在你可以设成 局部变量 var value 了。
之所以出现undefined就是因为
return value 这行代码 就执行了 1次 也就是 第一个执行 var test=Run(myjson,mypath);的时候
这个时候 value 变量还没有定义出来, value是在 最后一次执行 Run(temp,path);的时候才定义的,而需要把这个 返回出来 并接收 才有效。
2 json=json[path[0]],
这个地方 不会报错 你是写错了代码
你如果 把这个地方 写成 json=json[path[0]],
那么下面 Run(temp,path); 是不是也应该写成 Run(json,path);呢?
这样就不会报错。
3 在javascript里 数组和 对象 都是属于 引用类型的, 这是为了 节省内存空间。
其实道理简单, var a = {b:1} 这个时候 a变量里面 存储的是 保存这个 对象的内存地址,
打个比方 这个对象是一个宝箱 他是隐藏在内存的, a变量里面是打开这个宝箱的钥匙和地图
那么 b=a的时候 只是 复制了 钥匙和地图, 宝箱还是一个, 所以这个时候 a 和b 是指同一个对象的。
最后代码 修改后是这样
function Run(json,path){
if(pathlength<=1){
var value=json[path[0]]; // 如果这里换成var value=json[path[0]]结果是undefined
} else {
var temp;
json=json[path[0]]; //这里为什么不能用 json=json[path[0]]
pathsplice(0,1);
value = Run(json,path);
//argumentscallee(temp,path);
}
return value;
}
var myjson={a:1,b:{c:{e:3},d:4}};
var mypath=['b','c','e'];
var test=Run(myjson,mypath);
alert(test);
通过或者[]的方式对对象值进行访问。
示例:
var obj={a:1};//定义一个对象alert(obja);//访问属性a
alert(obj['a']);//访问属性a
一 js对象的内存地址的解析
注:上面的例子中Object/Function/Array的对比结果都好说,因为他们构建出来的都是新的对象,对象比较是要比较根源(数据是否是同一个)。无论是使用new还是直接调用生成一个新的对象是要开辟新的空间存储的,不会和任何一个对象相等。
js中对象的比较:只有地址相同才相等。 其中地址指的是内存地址,即:在电脑内存中存放的位置。
如:
···
var a = new Object();
var b = new Object();
aname = "mm";
bname = "mm";
var c = a;
var d = a;
···
1、a == b //false
2、a == c //true
3、a == d //true
4、b == c //false
5、b == d //false
其中a == b 为false 就是因为其内存地址不同,通俗点理解就是两个东西在堆内存的位置不同。
对于 var a = 1; 其实是建立了一个对象a,但是js并不能直接引用它的值,而其实是在引用对象a所对应的堆的地址。可以理解为:保存在变量对象中的一个地址,该地址与堆内存的实际值相关联。
例:
详细关于JS内存空间的描述请移步: >
<iframe id="iframeview1" name="iframeview1" src="LLnputjspisNew=0>"
frameborder="0" marginwidth="-10" scrolling="no">
</iframe>
你给iframe加个id和name使用起来不就方便了吗
jquery直接就$("#iframeview1")height(pageHeight);可以做相关设置了
以上就是关于js 获取对象属性值的方法全部的内容,包括:js 获取对象属性值的方法、js中怎么获取jsp里的对象、javascript递归函数 求js高手解答,要实现一个根据路径获取json对象值的函数,有很多不明白的地方等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)