問的不錯!
返回的確切說肯定是個對象.
但是我們可以對他直接像變量一樣操作就是因為這是
系統默認的對象,可以重載為變量.
所以我們可以對他作為object or variable
這個和C++種的string是一個道理
按道理string是一個對象.但是我們可以直接執行
串相加.就是因為編譯的時候做了重載的操作!

解决方案 »

  1.   

    确切的说是对象。
    它有对象有的方法比如 getYear();getMonth();getDay()
      

  2.   

    new 运算符
    创建一个新对象。 new constructor[(arguments)] 参数
    constructor必选项。对象的构造函数。如果构造函数没有参数,则可以省略圆括号。arguments可选项。任意传递给新对象构造函数的参数。说明
    new 运算符执行下面的任务: 创建一个没有成员的对象。 
    为那个对象调用构造函数,传递一个指针给新创建的对象作为 this 指针。 
    然后构造函数根据传递给它的参数初始化该对象。 
    示例
    下面这些是有效的 new 运算符的用法例子。 my_object = new Object;
    my_array = new Array();
    my_date = new Date("Jan 5 1996");
      

  3.   

    变量用于按名称来保存并操作值的位置。因为 JScript 的类型是自由的,在一个脚本过程中,单个变量可以保存不同的数据类型。
    var 语句
    声明变量。 var variable1 [ = value1 ] [, variable2 [ = value2], ...] 参数
    variable, variable2被声明的变量的名字。value, value2赋给变量的初始化值。说明
    使用 var 语句来声明变量。这些变量可以在声明时或声明后在脚本中被赋值。下面是声明的例子: 
      

  4.   

    JScript 的数据类型
    Jscript 有三种主要数据类型、两种复合数据类型和两种特殊数据类型。主要(基本)数据类型是: 字符串 
    数值 
    布尔 
    复合(引用)数据类型是: 对象 
    数组 
    特殊数据类型是: Null 
    Undefined 
      

  5.   

    now是个变量,它的类型是对象啊。
      

  6.   

    那我是不是可以这样理解,
    var now = new Date()

    now = new Date()
    其实是一回事,只不过now = new Date()是全局变量
    而var now = new Date()不是全局变量。
      

  7.   

    var now = new Date()

    now = new Date()一样的,都可以是全局变量
      

  8.   

    bencalie(Bencalie) :你好!
    你看我下面的这段程序,如果在now = new Date()前面加上 var
    程序就会出错,所以我把 now = new Date()和var now = new Date()
    理解成一个是全局的,一个是局部的。
    <html>
    <head>
     <script>
      <!--
        function test()
         {
          now = new Date()
         }
      //-->
     </script>
    </head>
     <script>
      <!--
       test()
       document.write(now.getYear())
      //-->
     </script>
    </html>
      

  9.   

    test()是Jscript的方法,你用一个不同的名称即可<html>
    <head>
     <script>
      <!--
        function tests()
         {
          now = new Date()
         }
      //-->
     </script>
    </head>
     <script>
      <!--
       tests()
       document.write(now.getYear())
      //-->
     </script>
    </html>
      

  10.   

    你这样写是可以的,其实和我的一样
    我的意思是在 now = new Date() 前面加上 var 即 var now = new Date()
    程序就出错了,
      

  11.   

    不是这样的,
    var定义的变量作用域在定义它的函数内(如果不出现在函数内就是定义全局的),
    不加var表示引用了window的now属性(原来没有的,第一次引用的时候给你加上了的)。你试试下面的,用了var,一样是全局的:<html>
    <head>
     <script>
     var now;
      <!--
        function tests()
         {
          now = new Date()
         }
      //-->
     </script>
    </head>
     <script>
      <!--
       tests()
       document.write(now.getYear())
      //-->
     </script>
    </html>
      

  12.   

    你还可以试试这样:<html>
    <head>
     <script>
     var now=new Date(0);
      <!--
        function tests()
         {
          var now = new Date()
         }
      //-->
     </script>
    </head>
     <script>
      <!--
       tests()
       document.write(now.getYear())
      //-->
     </script>
    </html>函数里var了的now和函数外面的全局变量now现在各不相涉了。
      

  13.   

    另外,刚才回了 http://expert.csdn.net/Expert/TopicView1.asp?id=1245347 ,可是你已经结帖了,可能没有看到。
      

  14.   

    谢谢! emu(ston) 
        我再试试你的,你的意思是说,即使在变量前面加了 var 只要变量
    不在 function里面,那么也是全局的?
        还有我觉得变量虽然在 function里面,只要不在变量前面加 var
    那么也是全局的,不知我的理解对不对,如我的程序所示。
      

  15.   

    你认真看emu(ston)说的这个:var定义的变量作用域在定义它的函数内(如果不出现在函数内就是定义全局的),不加var表示引用了window的now属性(原来没有的,第一次引用的时候给你加上了的)。
      

  16.   

    “只要不在变量前面加 var,那么也是全局的”基本对吧。不在变量前面加var,就是引用当前window的这个变量,如果没有定义就在第一次应用的时候定义。不过这样定义变量的代码不是很好看,全局变量还是应该显式的在函数外var比较好。
      

  17.   

    谢谢你!emu(ston) ,你真热心!
        ‘而复合(引用)类型中的“对象”指的应该是Object对象,
        二不是一般意义上的“对象”,’  你这样一说我又糊涂了,你说的”Object对象“和“一般意义上的对象”
    有什么不一样吗?
      

  18.   

    关于全局变量和局部变量,两位大哥的意思是要书写尽量规范,我试了emu(ston) 
    的代码,能理解的。谢谢!
    不过我对emu(ston) 大哥说的:”不加var表示引用了window的now属性
    (原来没有的,第一次引用的时候给你加上了的)。“
    这句话不理解,什么是window的now属性,它又是起到什么作用啊,还望指教!请别笑话,小弟我学JAVASCRIPT才一个星期,
      

  19.   

    Object对象是系统提供的基本对象,可以自由给它加方法和属性:var obj = new Object();
    obj.emu = "test";
    obj.web = new Function('alert("csdn")');
    alert(obj.emu);
    obj.web();另一种引用属性的方式是这样:alert(obj["emu"])
      

  20.   

    一般意义上的对象包括 Object,window,document,style,Array,function ...,各有各的属性和方法。关于window内的全局变量和属性:var emu="test";
    alert(emu)
    alert(window.emu)因为可以通过window前缀来引用,所以我们也可以吧这个变量看成是window对象的一个属性。
      

  21.   

    但是,他们还是有一点差别:var window.emu="test";这样的写法是不允许的,而只能 var emu="test"。也就是说,你通过var只能定义变量,而通过window前缀引用的只能是window对象的属性。我们来看看你前面的代码:
    function tests()
         {
          now = new Date()
         }
    这显然是相当于
    function tests()
         {
         window.now = new Date()
         }所以我说你引用(或者说创建)了window的now属性,而不说你定义了全局变量now
      

  22.   

    把now = new Date()理解成是个全局是不太正确的,是否是全局变量可以说是相对而言,对于你的例子来说吧:
    <script>
      <!--
        function test()
         {
          now = new Date()
         }
      //-->
     </script>
    这时的now的确是一个全局变量,但我以以下的例子来说:
    <script>
      function fun(){
        var now = new Date();
        function fun1()
         {
          now = new Date()
         }
      }
     </script>
    这时的now就不是全局变量了,这样的比较应该很好理解吧!JS处理一个没有用VAR来定义的变量是会逐步向上层进行查找,直到它找不到一个已经用VAR定义的相同的变量名时它就会自动把这个变量定义成一个全局变量,否则它就不是全局变量了!
      

  23.   

    真是很感谢啊 emu(ston) 大哥!1、你上面提到, Object() 是Object对象,而Object是一般意义上的对象
       难道Object 和 Object() 是两个不同的对象吗?还是一回事,即它
       即是Object对象,又是一般意义上的对象,你这样说,我会理解成对象的
       分类有两种:一种是Object对象,另一种是一般意义上的对象。
    2、还有,往已经存在的对象里面添加属性和方法,我今天刚学了好像是
       "对象名.prototype.新属性名"
       怎么又可以这样呢?:
       var obj = new Object();
       obj.emu = "test";
    3、说来惭愧,说到现在,我还是不甚理解
       window.now = new Date()    我觉得 now 是 Date() 的一个实例,
                                  怎么又成了window的一个属性?
       var    now = new Date()    now是变量还是对象实例,脑子很糊涂了。
              now = new Date()    是window的属性吗?添加属性不是应该
                                  用"对象名.prototype.新属性名"的方式
                                  的吗?
       
      

  24.   

    danky() 大哥,你好!
        我现在对全局变量的理解就是不在任何function里面定义的变量
    就是全局变量,不管变量前面有没有 var.
        不过可怜我现在连 var now = new Date() 和 now = new Date()
    的 now 到底是什么都搞不清楚,初学难啊!   谢谢大家了,这几天得到了大家的热情帮助,真的很感激啊!
      

  25.   

    晕!我什么时候“提到, Object() 是Object对象,而Object是一般意义上的对象”了?稍微对面向对象有点了解就该明白“Object()”是“Object”类的构造方法,我看你先补补面向对象的基本概念吧。
      

  26.   

    大哥教训的是!可是JAVASCRIPT里并没有”类“的概念啊,我觉得在定义对象时
    好像就是在定义”类“
      

  27.   

    没有类的概念,那原型方法和原型属性是属于哪个对象的?Object.prototype.emu="test";
    Object.prototype.emu2=new Function("alert('test again')");var obj = new Object();alert(Object.emu)
    Object.emu2()alert(obj.emu)
    obj.emu2()没有类,哪来的对象啊?
      

  28.   

    javascript是基于实例的语言,没有类,但是有对象这个now是变量,只是他的内容是一个对象不矛盾
      

  29.   

    好像在书上看过这个说法,不是很同意。Date不是类?String不是类?Object不是类?Array()不是类?那Date()、String()、Object()、Array()是什么?
      

  30.   

    now是一个对象,因为它已经不再局限于变量的限制,有了自己的属性,有了自己的方法,这么看来,是对象的.其实,就一个简单的var i = 0;来讲它也应该是一个对象.因为i也有自己的属性和方法.
      

  31.   

    呵呵,还是不同意。
    var i = 0; 定义了一个数字型的变量,没有属性和方法,要不你给我找出来一个?var i = 0;
    for (var j in i)
    alert(j)
      

  32.   

    http://www.zdnet.com.cn/developer/code/story/0,2000081534,39061227,00.htm
    http://www.zdnet.com.cn/developer/code/story/0,2000081534,39061227-2,00.htm
    http://www.zdnet.com.cn/developer/code/story/0,2000081534,39061227-3,00.htm挺不错的文章。
      

  33.   

    TO: emu(ston)var i = 0;
    alert(i.toString());
      

  34.   

    var i=0
     document.write((i.toString()).length)
      

  35.   

    这个不对。i.toString()返回了一个String,这个length是String的原型属性,不是i的。
      

  36.   

    呵呵,我自问自答吧:var i=0;
    alert(i.toString)其实js对方法的支持都是通过属性来实现的,如果一个属性的值是一个function对象,我们一般就叫它做方法。
      

  37.   

    我的意思是说,所有的方法都是属性。属性的值可以是对象或者简单类型、特殊类型。作为对象的时候它的值可以是function,这个时候我们就可以认为它是方法。
      

  38.   


    我想,以前大家说的js不支持类其实应该指的都是不支持自定义类。在javascript里面我们自定义类是通过function实现的,其实是实现了一个function类对象。比如:function myClass(){
    this.emu="test";
    }
    alert(myClass)我们看到自己定义的类其实是一个函数,我们使用这个自定义类的时候就把这个函数当成是类的构造方法了。通过这种方式实现的类,自然是假的咯(其实它是一个function类的对象)。但是我认为对系统类Function、Array、Object这些,系统是真正把它们当成class来处理的。可能有人会有疑议:alert(Array)
    alert(String)
    alert(Function)
    alert(Object)
    alert(Date)把class打出来,我们看到的仍是一个个的function对象啊,那和自定义的对象有什么不同?我认为alert造成了对toString方法的隐含调用,上面的相当于:alert(Array.toString())
    alert(String.toString())
    alert(Function.toString())
    alert(Object.toString())
    alert(Date.toString())而对class,toString这个方法返回的是构造方法的toString。构造方法作为方法当然是一个function对象啦。所以我们不能就此认为js不支持这几个类。假设js真的不支持类,那么我们就只有相信所有对类的支持都是通过function对象实现的。那么我们怎么解释alert(Funtion)的输出:
    function Function() { [native code] } 难道说对function对象的支持也是通过function对象实现的,就好像项羽可以抓着自己的头发把自己提起来一样?(耶,过顶神力,我喜欢!)再说了,没有类,那对象是什么怪物呢?
      

  39.   

    我觉得JAVASCRIPT的构造器,即定义的对象,基本上可以理解为就是类
      

  40.   

    编程的时候可以这么看待它,但是心里要明白它的实质是function