欲练此功必先自宫---从C#到Javascript(1)

由于时代需要,我也只能被自愿的去加入javascript的行列,但是作为C#拥护者,当初识js的时候,真的很不适应,我始终坚信这是门非常适合初学者,不,是完全没有编程经验的开发者,这门语言简直再好不过了,没有很多规约,可以说有些随意的定义,非常适合没有什么概念的小朋友。

这边开始,我透过c#的对比,来开始伟大的jsp研究了。


1. objec == null?

我们在C#中通常有if(sth ==null)的判断,虽然也有通过写扩展方法的nullable object模式来摆脱这个难看的东西:

http://www.cnblogs.com/anytao/archive/2008/07/31/must_net_21.html

详情参照这位大侠写的这篇,我们回到jsp,在jsp中,根本不存在这样的判断:

if(sth){ }....

就这样结束了,虽然很干净,但是,这tm也太干净了,确实,这是个好方法。


2. 木有重载

C#中重写和重载的区别是什么,相信各类面试官都喜欢问这个,我们不加赘述了,但是重载在C#中,我们可以有:

public void Dosth()
{}

public void Dosth(string s)
{}

public void Dosth(string s, string s2)
{}
但是在JSP中,根本没有重载的概念,而所有的方法都被藏在了一个隐藏对象argument中,

function firstMethod(){
	if(arguments.length == 0){
		
	}
	else if(arguments.length == 1){
		
	}

}
因此我们有了这么个难看的重载方式,解释应该不需要解释,大家都能看得懂了,好处就是调用的时候根本不用管方法原本长成什么样,神马?你还是没看懂,那我们还是回到c#吧:

        private void Do(params object[] obj)
        {
            if (obj.Count() == 0)
            { 
            }
            else if (obj.Count() == 1)
            { 
            }

        }

对,jsp中所有方法的定义都长这样,而且不限定返回值,也就是木有void这个关键字,爱return不return,随便你。


3. 全局变量&局部变量

这两个概念在c#很强,但是在JSP中未必很强,很简单的概括,var sum = 11这句话会被添加到最近的语言环境中,神马是语言环境,就是一个方法,或者,一个方法...

所以:

if(1==1){
	var color = "white";
}
alert(color);

这样的color是有意义的,

function secondFunction(){
	var color = "white";
}
alert(color);
而这样,下面的color是错误的,但是下面这样又有意义了:

function secondFunction(){
	 color = "white";
}
secondFunction();
alert(color);

很神奇,在方法执行后,color就变成全局变量记录在内存中了,不加var的结果就是这样,虽然一般我们不这么定义全局变量。说实话,在JSP中讨论变量是很无聊的事情,因为我猜想创建者根本没想那么多,只觉得,这个变量我要在这里用,这个变量我要一直用,巴拉巴拉。


4.Array操作
这里看到jsp对array的操作,我们就能想到微软伟大的linq了,确实linq可以秒杀任何集合操作语句,但是我们还是来看下jsp中的筛选:

//Arrary Definition
var values = [0,1,2,4,3,9,8];
values.sort(function(value1,value2){
	return value1-value2;
});
alert((values.valueOf().toString()));

//Take from 1 to 4
var val1 = values.slice(1,4);

//Push 2, 3, 3 into the array
var val2 = values.concat(2,[2,3]);

//Delete 2 numbers from index 1 , then insert 9,10 from index 1
//val4 is the items delete from values.
var val4 = values.splice(1,2,9,10);

//If all items in values are >2, val5 = true
var val5 = values.every(function(item,index,arr){
	return (item>2);
});

//If any item in values is >2, val5 = true
var val6 = values.some(function(item,index,arr){
	return (item>2);
});

//val7 = the items which is >2
var val7 = values.filter(function(item,index,arr){
	return (item>2)
});


//val8 = the item in values which has been * 2
var val8 = values.map(function(item,index,arr){
	return (item*2);
});

//-> for (var i=0;i<=values.length;i++) {} 
var val9 = values.forEach(function(item,index,arr){
	
});

var val10 = values.reduce(function(prev,cur,index,arr){
	return prev +cur;
});
我们用linq关键字来说明下,下面的左边是jsp,右边是linq:

every -> All

some -> Any

filter -> Where

map -> Select

当然还有些别的,最后个reduce比较有意思,从第一项开始2项2项进行归并操作,当然还有个reduceRight是与之相反,从最后项开始的。

至于forEach,其是linq也有,但是很少见而已。


5. 神奇的function传递与this

this关键字在C#简直不要太简单,但是在jsp中却有各种含义,其实主要就是this所在的环境决定他自己是个什么东西,并且可以通过函数内的call/apply方法对目标函数的this进行赋值,这里有很强的指针概念,面向对象概念被弱化了,这两个方法扩大了方法的作用区域,传说中降低了耦合。

function CallHarly(){
	alert(this.o);
}
var o = "harly2";
var person = {o:"harly"};

CallHarly.call(this);
CallHarly.call(person);


我们可以看到,我们把this和person分别作为Callharly中的this进行赋值,所以出来的结果也是不一样的。

今天我们最后来一个很神奇的方法:

eval("alert('harly')");

这个类似于编译器的方法可以直接把里面的string字符串解析成代码进行执行,看起来用处挺大.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值