樓主問的這些問題非常好!針對JavaScript來講,上述這些問題弄清楚了,就會感覺到豁然開朗!推薦樓主看【JavaScript: The Definitive Guide, 4th Edition】上述這些問題都有詳細的描述!

解决方案 »

  1.   

    javascript 没有JAVA那样的强大,和严格的定义 
      

  2.   

    弱语言,var a=3默认是数值型
      

  3.   

    我自己明白,可是我没把握能说明白……
    等高手说吧挑个最简单的问题说
    var a  = 3; 没有length属性,  var a = "dsfdsf" 竟然有了length属性?。 JS的变量类型是不固定的,会自动根据赋于它的值的类型而改变
    a=3的时候,a是Number型,也就是数字,数字是没长度的
    a="asdf"的时候,a就是String了,字符串是有长度了
    JS是有基本类型的,明白了这些基本类型的用法就明白了
      

  4.   

    再学习js之前你应该对js有个基本的了解。js是一动态语言,当然也就符合动态语言的共性。
    而动态语言之所以叫做动态语言并不仅仅是因为它需要被解释机解释执行,还因为他的对象
    类型和结构是可以在运行过程中改变的,这一点在C Java等编译语言中是不允许的。我比较
    喜欢用用少林和武当来比喻编译语言和动态语言之间的区别。在c 、 Java的世界里一切都是
    都是刚性的从创建的那一刻起就已经定性了男人就是男人女人就是女人,而在js的世界里一切
    是都是可以变化的,创建时是一个男人,并不能保证最后还是一个男人。<script type="text/javascript">
    function Human(name,age,sex){
        this.name=name;
        this.age=age;
        this.sex=sex;
    }
    Human.prototype.say=function(){
        alert("hello !\n"
              +"my name is:"+this.name+"\n"
              +"my age  is:"+this.age+"\n"
              +"my sex  is:"+this.sex);
    }function Man(name,age){
        Human.call(this,name,age,"male");
    }
    Man.prototype=new Human();
    Man.prototype.shave=function(){
        alert("我是"+this.name+"正在刮胡子!");
    }function Woman(name,age){
        Human.call(this,name,age,"female");
    }
    Woman.prototype=new Human();
    Woman.prototype.birth=function(){
        alert("我是"+this.name+"能生一个孩子");
    }var boy=new Man("张三",22);
    var girl=new Woman("莉莉",22);boy.say();
    girl.say();boy.shave();
    girl.birth();Woman.prototype.shave=function(){
        alert("只要需要女孩也可以刮胡子!");
    }
    Man.prototype.birth=function(){
        alert("只要需要男孩也可以生孩子!");
    }
    Human.prototype.say=function(){
        alert("我是"+this.name+"因为系统需要我现在成了人妖!");
    }boy.birth();
    girl.shave();boy.say();
    girl.say();
    </script>
      

  5.   

    JavaSCRIPT,弱语言,
    JAVASCRIPT会自己判定是否为什么类型
      

  6.   

    主要是javascript的语法太灵活了,规范不的很严格,就有很多出其不意的东西,我现在碰见几个也是在郁闷中~~~~~~
      

  7.   

    楼主我学JS连今天是第二天,和你探讨探讨,才学可能我讲的有很多问题
    1不同于C、JAVA等语言,JS属于弱语言,语法核心是ECMAScript,里面的变量声明比较随意,在使用变量时甚至可以不加
    声明直接使用,不过规范写法还是用VAR 声明下,楼主那种有无length的情况完全是视你的变量是数值还是字符串。
    2JS是基于对象的语言,他不是完全面向对象的,所以并不具备面向对象的全部特征,js给我感觉是没什么封装性可言的
    对象里的属性和方法都是人为整合到一起的,本身在对象内外都有方法表示。
    楼主看了一天思考就这么深入,佩服,本来以为自己会了,发现楼主问题没几个答的上来,很多概念还很模糊
    还要继续学习啊 
      

  8.   

    <html>
    <head>
    <meta content="text/html" charset="gb2312">
    <script type="text/javascript">
    function SuperClass(sname){
    this.name=sname;
    this.getClassName=function(){
        alert("SuperClass");
    }
    this.sayHello=function(){
        alert(this.name+" SuperClass--sayHello");
    }
    }

    function ChildClass(sname){
      
        this.Super=SuperClass;                      //继承父类SuperClass    JS类 继承第一种方式
          this.Super();
      
        //SuperClass.call(this);                    //继承父类SuperClass    J2类 继承第二种方式
      
        this.name=sname;
        this.sayHello=function(){                 //重写父类的sayHello()方法
            alert(this.name+"  ChildClass--sayHello");
        }
    }

    function temp(){
        var child=new ChildClass("一万哥");
        child.sayHello();                       //子类重写了父类的方法。
        child.getClassName();                   //子类继承父类的方法
    }
    window.attachEvent("onload",temp);
    </script>
    </head>
    <body>
    <div id="maindiv">
            JavaScript高级程序设计!!! JavaScript是一门强大的基于对象的脚本语言....
    </div>
    </body>
    </html>
      

  9.   

    我学习JS有三周了,也是newbie,尝试根据我自己的理解来解答一下:1. var a  = 3; 没有length属性,var a = "dsfdsf" 竟然有了length属性?上面已回答,注意分清变量类型,数值型与字符型的属性不同.2. 作用域: 全局,在外边定义的,不分{};局部在function(){}里定义的;我也是这么理解的.但要注意理解分清如果全局变量和局部变量的名称相同时,他们的作用范围.3. 我们发现javascript的方法竟然不能重载,有参数的总会覆盖掉之前的无参的方法;所以我奇怪的是Array()这个对象是怎样产生的那样多的构造方法!并且方法里总有一个argumengs这个对象;而且return的究竟是一个什么样的对象,也无从而知,不知道此对象,就无法得知此对象有什么属性和方法这个我也不是很清楚...4. 我发现面向对象的思维无法在javascript中得到体现,封装,继承,多态都感觉不到(可能还没接触到后面吧!),并且将构造函数称为对象,将new出来的称为一个对象实例;还发现的是构造函数竟然无法重载,又回到了方法的疑问上了呵呵!
    还有一个补充问题就是: var a = new Peson(); alert(a); 为一个object;var a = new Function(); alert(a); 竟然不是一个object;这两个定义是不同的,一个是定义的类,一个是定义的函数.5. 我发现javascript根本就没有创造出什么数组来,里面竟然有undefined,这根本就不合逻辑啊,undefined没有分配内存区域,不是断开的吗?无法理解!这个undefined不表示没有分配内存区域,而只是没有明确定义的值,就像C中只定义了指针,但未赋值时,这个指针的状态也是未定义的.
    楼主应当也是在看张孝祥的javascript网页开发吧?
      

  10.   

    太长了,回答您第一问题吧。javascript是弱类型语言,变量不需要定义可以直接使用,在赋值时分配空间,而不是定义的时候。
      

  11.   

    1:javascript是弱类型语言,引擎根据给变量赋的值自动判断变量的类型,a  = 3,值没有加引号,脚本引擎判断它是number类型,若值写成"3",那么引擎判断它为字符串,那么自然就可以取得值得length。
    这种若类型给写javascript带来了极大的灵活性。在javascript世界里,你可以将任何类型给一个变量,如:
    var a;
    a = 1;
    a="hello world";
    a=function(){};
    a = []; //数组
    a = {}; //对象javascript的类型,Number,Array,Function,Object,null,undefined等对于类型的判断,你可以
     //javascript对象类型检测
     var variablechecker = {
      isElement: function(object) {
        return object && object.nodeType == 1;
      },  isArray: function(object) {
        return object && object.constructor === Array;
      },  isFunction: function(object) {
        return typeof object == "function";
      },  isString: function(object) {
        return typeof object == "string";
      },  isNumber: function(object) {
        return typeof object == "number";
      },  isUndefined: function(object) {
        return typeof object == "undefined";
      }
      }2:关于方法重载:
    javascript里n多东西能够从数组中获得,比如你给方法传递参数,但是在声明方法时,确不指定“形参”,那么参数怎么获取呢?当然是通过参数数组"arguments"了,既然是数组就能够按数组的方法来取得里面的参数值。
    function fn()
    {
    if(arguments.length == 2)
    {
    ....
    }if(arguments.length == 1)
    {
    ....
    }
    }fn(1,2);fn("hello");关于return的是什么类型的值,要看return var;这个var的类型了.3:关于javascript面向对象实现,可以参考msdn上的一篇文章,我今年就靠它混的...
    http://msdn.microsoft.com/zh-cn/magazine/cc163419.aspx4:关于javascrit的数组,
    在js里undefined也是一种值类型,它会占用内存空间的吧?(不太清楚).
    你可以在数组里放任何东西,把数组的每个元素看成是一个普通变量就好了。
    var array = [1,"1",null,undefined,{},[],function(){}];另外介绍一个小技巧,数组可以实现队列和栈数据结构:
    //队列
    var queue = [];
    //入队
    queue.push(1);
    queue.push(2);
    queue.push(3);
    queue.push(4);
    queue.push(5);//出队
    queue.shift();//queue => 2,3,4,5
    //栈
    var stack = [];
    //入栈
    stack.push(1);
    stack.push(2);
    stack.push(3);
    stack.push(4);
    stack.push(5);//出栈
    stack.pop();
    //stack => 1,2,3,4可能有不对的地方,欢迎大家指正!
      

  12.   

    楼主先学习javascript的对象吧.
    然后再回来看这些问题网上也有一些关于js的面向对象编程的资料.
      

  13.   

    http://www.ccscript.cn/Category/1.aspx这儿全是javascript学习的基础。里面还有JS对象的详细文章,还有更多JS框架的知识。一定有你需要的
      

  14.   

    7楼那个男女的例子中:
    alert(boy instanceof Man)//true
    alert(boy.instructor==Man)//false
    boy在改变原型之前建立,也 继承新原型的属性?看来,是的