为何变是不定义就不能用 alert()输出,但是对象的属性不定义,就允许用 alert()输出呢:
如下所示,变量myvalue不存在,alert(myvalue)会报错,提示 myvalue 未定义,
但是对于对象 o,本身也没有myvalue 属性呀,但是 alert(o.myvalue)竟然不报错,这是为什么呢?
有什么规定或是约定吗?
<script type="text/javascript"> var o=new Object;
alert(o.myvalue);
alert(myvalue);
</script>
如下所示,变量myvalue不存在,alert(myvalue)会报错,提示 myvalue 未定义,
但是对于对象 o,本身也没有myvalue 属性呀,但是 alert(o.myvalue)竟然不报错,这是为什么呢?
有什么规定或是约定吗?
<script type="text/javascript"> var o=new Object;
alert(o.myvalue);
alert(myvalue);
</script>
<script type="text/javascript"> var o=new Object;
alert(o.myvalue); //undefine
alert(window.myvalue); //undefine
</script>其实定义一个全局变量,就是把他注册成为window的属性
<script type="text/javascript"> var attr = 10;
alert(window.attr); //为10
</script>我想楼主的这个问题是 因为:一个变量(myvalue)只要指定了它所属的对象(o),那这个这个变量(myvalue)就是对象(o)的一个属性,不管对象(o)有没有定义(没有定义就是undefined)。
alert(window.myvalue)输出undefined也是这个道理。但是如果没有指定myvalue所属的对象,在没有定义之前直接用的话,浏览器就会到window中找,并默认在全局对象(window对象)中肯定有这个属性,结果找不到,那就出错了。个人分析,仅供参考。
var a={};//a是一个对象
a.name="ass";//a的name属性没有定义就可以使用但是如果对象未定义就使用会报错,因为变量在全局缓存中找不到!
以上说明会因不同的浏览器而异,有些现代浏览器会屏蔽这种类型的错误!
a.name="ass";//a的name属性没有定义就可以使用
---------------------------------------------
你没有明白我的问题,
其实对于赋值操作,不管是否定义,不管在何处,赋值不会报错。
比如value=5;
o.value=6;
因为赋值不管在何处,都不会报错。我问的是使用这个变量,比如在 alter()中,变量不定义,alter就报错,但是对象的属性,不定义时,alter就不报错。
关键是,为什么对于普通变量,不是这样处理呢?即对于没有定义的变量。
alert(height);时,为何报错,而不是输出 undefined 呢?