js 获取对象属性值的方法

js 获取对象属性值的方法,第1张

第一种通过获取

第二种通过[]获取

那什么时候用点获取什么时候[]呢,可以在不同场景使用

两个的相同点:都是获取对象属性值

不同点:

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对象值的函数,有很多不明白的地方等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9266014.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存