为何变是不定义就不能用 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>

解决方案 »

  1.   

    这个问题暂时没想好,不过下面这个是可以的
    <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对象)中肯定有这个属性,结果找不到,那就出错了。个人分析,仅供参考。
      

  2.   

    对象的属性是可以匿名使用的,就是说对于对象,属性即使没有声明就可以拿来就用,如:
    var a={};//a是一个对象
    a.name="ass";//a的name属性没有定义就可以使用但是如果对象未定义就使用会报错,因为变量在全局缓存中找不到!
    以上说明会因不同的浏览器而异,有些现代浏览器会屏蔽这种类型的错误!
      

  3.   

    var a={};//a是一个对象
    a.name="ass";//a的name属性没有定义就可以使用
    ---------------------------------------------
    你没有明白我的问题,
    其实对于赋值操作,不管是否定义,不管在何处,赋值不会报错。
    比如value=5;
    o.value=6;
    因为赋值不管在何处,都不会报错。我问的是使用这个变量,比如在 alter()中,变量不定义,alter就报错,但是对象的属性,不定义时,alter就不报错。
      

  4.   

    我问的是使用这个变量,比如在 alert()中,变量不定义,alert就报错,但是对象的属性,不定义时,alert就不报错。
      

  5.   


    关键是,为什么对于普通变量,不是这样处理呢?即对于没有定义的变量。
    alert(height);时,为何报错,而不是输出 undefined 呢?