欢迎访问 生活随笔!

尊龙游戏旗舰厅官网

当前位置: 尊龙游戏旗舰厅官网 > 前端技术 > javascript >内容正文

javascript

javascript 编程思想 -尊龙游戏旗舰厅官网

发布时间:2025/1/21 javascript 14 豆豆
尊龙游戏旗舰厅官网 收集整理的这篇文章主要介绍了 javascript 编程思想 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

为什么80%的码农都做不了架构师?>>>   

 javascript中的数据很简洁的。简单数据只有 undefined, null, boolean, number和string这五种,而复杂数据只有一种,即object。
javascript中的代码只体现为一种形式,就是function。

 注意:以上单词都是小写的,不要和number, string, object, function等javascript内置函数混淆了。要知道,javascript语言是区分大小写的呀!

任何一个javascript的标识、常量、变量和参数都只是unfined, null, bool, number, string, object 和 function类型中的一种,也就typeof返回值表明的类型。除此之外没有其他类型了。

简单数据类型:

undefined:   代表一切未知的事物,啥都没有,无法想象,代码也就更无法去处理了。
                    注意:typeof(undefined) 返回也是 undefined。
                    可以将undefined赋值给任何变量或属性,但并不意味了清除了该变量,反而会因此多了一个属性。

null:             有那么一个概念,但没有东西。无中似有,有中还无。
                    注意:typeof(null)返回object,但null并非object,具有null值的变量也并非object。

boolean:      是就是,非就非,对就对,错就错,绝对明确。既能被代码处理,也可以控制代码的流程。

number:       线性的事物,大小和次序分明,多而不乱。便于代码进行批量处理,也控制代码的迭代和循环等。
                    注意:typeof(nan)和typeof(infinity)都返回number 。
                              nan参与任何数值计算的结构都是nan,而且 nan != nan 。
                              infinity / infinity = nan 。

string:         面向人类的理性事物,而不是机器信号。人机信息沟通,代码据此理解人的意图等等,都靠它了。

简单类型都不是对象,javascript没有将对象化的能力赋予这些简单类型。直接被赋予简单类型常量值的标识符、变量和参数都不是一个对象。

所谓“对象化”,就是可以将数据和代码组织成复杂结构的能力。javascript中只有object类型和function类型提供了对象化的能力。

没有类
object就是对象的类型。在javascript中不管多么复杂的数据和代码,都可以组织成object形式的对象。
但javascript却没有 “类”的概念!
这样,我们先来看一段javascript程序:
     var  life  =  {};
    
for (life.age  =   1 ; life.age  <=   3 ; life.age )
    {
        
switch (life.age)
        {
            
case   1 : life.body  =   " 卵细胞 " ;
                    life.say 
=   function (){alert( this .age this .body)};
                    
break ;
            
case   2 : life.tail  =   " 尾巴 " ;
                    life.gill 
=   " " ;
                    life.body 
=   " 蝌蚪 " ;
                    life.say 
=   function (){alert( this .age this .body " - " this .tail " , " this .gill)};
                    
break ;
            
case   3 delete  life.tail;
                    
delete  life.gill;
                    life.legs 
=   " 四条腿 " ;
                    life.lung 
=   " " ;
                    life.body 
=   " 青蛙 " ;
                    life.say 
=   function (){alert( this .age this .body " - " this .legs " , " this .lung)};
                    
break ;
        };
        life.say();
    };

这段javascript程序一开始产生了一个生命对象life,life诞生时只是一个光溜溜的对象,没有任何属性和方法。在第一次生命过程中,它有了 一个身体属性body,并有了一个say方法,看起来是一个“卵细胞”。在第二次生命过程中,它又长出了“尾巴”和“腮”,有了tail和gill属性, 显然它是一个“蝌蚪”。在第三次生命过程中,它的tail和gill属性消失了,但又长出了“四条腿”和“肺”,有了legs和lung属性,从而最终变 成了“青蛙”。不过,在看完这段程序之后,请你思考一个问题:

我们一定需要类吗?

还记得儿时那个“小蝌蚪找妈妈”的童话吗?可爱的小蝌蚪也就是在其自身类型不断演化过程 中,逐渐变成了和妈妈一样的“类”,从而找到了自己的妈妈。这个童话故事中蕴含的编程哲理就是:对象的“类”是从无到有,又不断演化,最终又消失于无形之 中的...

所以,javascript中没有“类”,类已化于无形,与对象融为一体。正是由于放下了“类”这个概念,javascript的对象才有了其他编程语言所没有的活力。

函数的魔力 接下来,我们再讨论一下javascript函数的魔力吧。

javascript的代码就只有function一种形式,function就是函数的类型。也许其他编程语言还有procedure或 method等代码概念,但在javascript里只有function一种形式。当我们写下一个函数的时候,只不过是建立了一个function类型 的实体而已。请看下面的程序:
     function  myfunc()
    {
        alert(
" hello " );
    };
    
    alert(
typeof (myfunc));
这个代码运行之后可以看到typeof(myfunc)返回的是function。以上的函数写法我们称之为“定义式”的,如果我们将其改写成下面的“变量式”的,就更容易理解了:
     var  myfunc  =   function  ()
        {
            alert(
" hello " );
        };
    
    alert(
typeof (myfunc));
这里明确定义了一个变量myfunc,它的初始值被赋予了一个function的实体。因此,typeof(myfunc)返回的也是function。 其实,这两种函数的写法是等价的,除了一点细微差别,其内部实现完全相同。也就是说,我们写的这些javascript函数只是一个命了名的变量而已,其 变量类型即为function,变量的值就是我们编写的函数代码体。

问题:既然函数只是变量,那么变量就可以被随意赋值并用到任意地方啰?

我们来看看下面的代码:
     var  myfunc  =   function  ()
        {
            alert(
" hello " );
        };
    myfunc(); 
// 第一次调用myfunc,输出hello
    
    myfunc 
=   function  ()
        {
            alert(
" yeah " );
        };    
    myfunc(); 
// 第二次调用myfunc,将输出yeah
好了,我们又来把上面的代码改成第一种定义式的函数形式:
     function  myfunc ()
    {
        alert(
" hello " );
    };
    myfunc(); 
// 这里调用myfunc,输出yeah而不是hello
    
    
function  myfunc ()
    {
        alert(
" yeah " );
    };    
    myfunc(); 
// 这里调用myfunc,当然输出yeah
这又是为什么呢?

原来,javascript执行引擎并非一行一行地分析和执行程序,而是一段一段地分析执行。而且,在同一段程序的分析执行中,定义式的函数语句会被提 取出来优先执行函数定义执行完之后,才会按顺序执行其他语句代码。也就是说,在第一次调用myfunc之前,第一个函数语句定义的代码逻辑,已被第二个 函数定义语句覆盖了。所以,两次都调用都是执行最后一个函数逻辑了。

如果把这个javascript代码分成两段,例如将它们写在一个html中,并用
  • 上一篇:
  • 下一篇:
网站地图