急,javascript不是对象的问题?var a=123;
typeof(a)类型为numbera的类型为number,为什么可以这么写a.constructor呢?a又不是对象,为什么可以a.constructor呢?他的类型是number啊,又不是object啊,为什么可以a.constructor啊?为什么啊?--------------------------------------------------------------------------
function kk(){}
typeof(kk)类型是functionkk的类型为function,为什么可以这么写kk.constructor?kk又不是对象,为什么可以kk.constructor呢?他的类型为function,又不是object类型,为什么可以kk.constructor啊?为什么啊?
javascript为什么这么变态啊?为什么啊?难以置信的变态啊!

解决方案 »

  1.   

    首先,Javascript是一门神奇的语言.var a = 123;
    等价于:
    var a = new Number(123);//显示创建Number对象因为:JScript 根据数字值的要求创建 Number 对象。 很少有必要显式创建 Number 对象(来自javascript API),类似比如
    var a = "123";
    等价于
    var a = new String("123");//显创建String对象但是Date类型的对象就只能new Date()来创建.constructor 属性是所有具有 prototype 的对象的成员。它们包括除 Global 和 Math 对象以外的所有 JScript 固有对象。constructor 属性保存了对构造特定对象实例的函数的引用。所有 JScript 固有对象都有只读的 prototype 属性。固有对象是作为标准 JScript 语言一部分的一种对象。所有的脚本都可以使用这种对象。JScript 中的固有对象包括 Array,Boolean,Date, Function,Global,Math,Number,Object,RegExp,Regular Expression,和 String。(来自javascript API)所以,有不明白的地方请自己查API
      

  2.   

    var定义的是任何类型。
    var a = 1;

    var a = new Number(1);
    是一个意思。
      

  3.   

    javascript其它对象包括本地对象、内置对象、宿主对象 还有你自己派生出来的对象的基类都是object.
      

  4.   

    var a = 123;
    等价于:
    var a = new Number(123);//显示创建Number对象不等价吧?
    一个放的内存的堆栈中,一个放在堆里了。