js新手求助:Uncaught TypeError: Cannot read property '1' of undefined

<html><head><metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"/><title>无... <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>无标题文档</title>
<style>
#div1{width: 200px; height: 200px; background:#000;;}
</style>
<script>

window.onload=function()
{
var oBtn=document.getElementById('btn1');
var oDiv=document.getElementById('div1');

oBtn.onclick=function()
{
//css(oDiv,'background','red');
alert(css(oDiv,'width'));
}

function css()
{
if(arguments.length==2)
{
if(oDiv.currentStyle)
{
alert(arguments[0].currentStyle.arguments[1]);
}
else
{
alert(getComputedStyle(arguments[0],false).arguments[1]);
}
}
else if(arguments.length==3)
{
arguments[0].style[arguments[1]]=arguments[2];
}
}
}

</script>

</head>

<body>
<input id="btn1" type="button" value="样式" />
<div id="div1"></div>
</body>
</html>

做一个类似css方法,胆识width是undefined。。为什么啊。。。
自己又研究了下
else
{
alert(getComputedStyle(arguments[0],false).arguments[1]);
}

改成
else
{
alert(getComputedStyle(arguments[0],false)[arguments[1]]);
}
就可以了,但我不知道原理,有人能告诉我原理么,.和[]什么区别。。。

那个style也是一样问题
oDiv.style.width是错误的

oDiv.style[width]是对的。
老师说.和[]是一样的。。为什么差别那么大,求真相
展开
 我来答
园林植物手册
高粉答主

2018-08-27 · 关注我不会让你失望
知道答主
回答量:191
采纳率:100%
帮助的人:9.5万
展开全部

正确的理解和解释如下:

把getComputedStyle(arguments[0],false)看做一个对象。

getComputedStyle(arguments[0],false).arguments[1]的意思是对象arguments(数组)属性的第二个值。

getComputedStyle(arguments[0],false)[arguments[1]]的意思是取“arguments[1]的值”对应的属性值。

arguments是参数,在你的function中传进去的参数。

第一中情况的arguments是你getComputedStyle(arguments[0],false)的属性,它没有arguments属性或arguments的个数小于2,当然会出错了,而第二种情况是把你传进去的参数作为属性穿进去的所以正确。

如果你不明白,那换另一种说法:假如你有对象obj,那么第一种情况是obj.arguments[1]也就相当于(obj.arguments)[1],第二种情况就是obj.(arguments[1])。

拓展资料:

JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。

参考资料:百度百科-javascript

xx7760e5
2013-09-26 · TA获得超过365个赞
知道小有建树答主
回答量:255
采纳率:100%
帮助的人:175万
展开全部
把getComputedStyle(arguments[0],false)看做一个对象。
getComputedStyle(arguments[0],false).arguments[1]的意思是对象arguments(数组)属性的第二个值
getComputedStyle(arguments[0],false)[arguments[1]]的意思是取“arguments[1]的值”对应的属性值。
追问
arguments[0]就是oDiv,arguments[1]就是width吧

那就是
oDiv.width,报错。。。
oDiv[width],就正常了。。。
我太新手了您照着这个给我说说吧。可能比较好理解。。麻烦了。

那个style也是一样问题
oDiv.style.width是错误的

oDiv.style[width]是对的。
老师说.和[]是一样的。。为什么差别那么大,求真相
追答
你搞错了,arguments是参数,在你的function中传进去的参数。
第一中情况的arguments是你getComputedStyle(arguments[0],false)的属性,它没有arguments属性或arguments的个数小于2,当然会出错了,而第二种情况是把你传进去的参数作为属性穿进去的所以正确。
如果你不明白,那换另一种说法:假如你有对象obj,那么第一种情况是obj.arguments[1]也就相当于

(obj.arguments)[1],第二种情况就是obj.(arguments[1]);这会清楚了吧。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小河感n
2013-09-26 · TA获得超过460个赞
知道小有建树答主
回答量:201
采纳率:0%
帮助的人:149万
展开全部
alert(css(oDiv,'width'));

alert(arguments[0].currentStyle.arguments[1]);

我的理解是你传过去的'width'是个字符串
而alert(arguments[0].currentStyle.(这儿必须跟的是currentStyle的方法或者currentStyle的属性),arguments[1]根本就不是属性、方法,
至于arguments[0].currentStyle[arguments[1]]就能运行,你把他当成数组,arguments[1]是数组索引名,就能理解了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友bf20e74
2017-11-04
知道答主
回答量:1
采纳率:0%
帮助的人:936
展开全部
当属性是自定义的变量时,就不能用 . 必须用[]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式