java中和javascript中的函数、正则表达式、数组、选择结构和循环函数可以通用吗? 有什么区别?
展开全部
刚好你问的我都不陌生,挑战一下我的理解力与总结能力。
首先说明两门语言不一样,除了有java这个字,语句块的表达一样外几乎没啥共同性。javascript只因单年java太流行,自己也跟着有个java的名称,设计javascript的人初衷的确想弄的跟java一样,但是做不到。
javascript是解释执行的,需要宿主环境来执行,比如浏览器就是一个宿主环境,node.js提供的javascript也是个宿主环境,还有adobe pdf也提供了javascript的宿主环境,javascript的宿主环境很多,windows office 苹果的store有。再余下的还有不知道了。
java编译执行的,最先设计用来,给美国的有线电视机顶盒,写控制代码,发明之初100多两百个类,比现在好学,运行环境要求也不严格。很小的内存,很少的cpu资源就可以跑起来,怀念可惜这方面的功能我不会用。后来java的设计团队觉得,java应该有更大作为。在浏览器开发设计盛行的90年代,java的设计者用java开发过浏览器,在浏览器上发展applet,可惜微软不待见java,java在浏览器方面的努力,再牛(我看过很多java方面的书,很多设计理念都很好,只可惜运行平台不是自己的),也失败了。最终java实现了跨平台发展,这才是java的活力所在。所谓跨平台虚拟机也要有人提供,sun公司自己写的虚拟机还行。见过hp-unix上跑的虚拟机问题不少!!!
javascript规范里面说明,javascript是非类型安全的。而java是类型安全的,区别很大。
上个例子:
js:
var myLover = true;
console.log(myLover);
myLover = "myself";
console.log(myLover);
js这样写不会有问题的,同一变量可存储逻辑值,也可存储字符串。甚至再放函数引用也行,对象引用也可以。
java:
public class TestDriver {
public void main(String[] args)
{
String s = "myLOver";
//下面会出错的,编译都通不过,s只能存储字符串型的数据,这就是所谓的类型安全!
//s = true;
System.out.println(s);
}
}
java我的理解一门真正的编程语言,语法结构严谨,必须按照一定规则写,否则就是错误。javascript语法松散,缺个;没事的,javascript支持运行时的动态特性,比如运行时添加方法,成员等等。java没这特性,java的运行时动态性,我知道的主要是反射(牺牲了语言的安全性,很多功能都依赖反射,还不好理解!),比如动态代理,json、xml、orm框架实体与数据之间的自动转化都需要反射支持。反射不安全在于,可以随便访问类或实例的任何成员,任何方法,包括申明为private的域与方法。
铺垫了这么多,来回答你想知道的问题。
先说函数,函数只有javascript中才有,java中绝对没有函数。java是真正面向对象的语言,要想使用的基本功能,在java.lang与java.util这两个包中去找,全部是以类的方式提供。这里没有绝对,函数也好,类中的方法也好,实现思路有可能是通用的。javascript也可以实现面向对象编程,但我见到老点的代码,都函数式面向过程编程。直到学jquery的时候才看到面向对象编程方法。但我不喜欢,jquery的扩展方式。javascript面向对象方式amd值得推崇,dojo框架用的就是amd,还有国内阿里的前端工程师更牛融合jquery与amd的优点,自己创建了一个效率很不错的框架。
再说正则表达式:
js里面的正则表达式两种方式使用:
第一、用法较常见,包括js框架中都这种用法,我采纳的这种用法。
var regExp = /^http:\/\//gi;
var isUrl = regExp.test("http://www.baidu.com/register");
console.log(isUrl)
第二种、用正则表示对象,这块不常用,要写样例还需要查api参考,不给了。
java常用的正则表达式也是两种:
第一种、java.util包中提供的,这个也要查api不谢样例了;
第二种、第三方提供的,传说效率很高,我倒是没发现。名字忘记了,我一般用spring中用的那个,平时写的程序不在这台电脑上,不好查,抱歉。
javascript 与 java的正则表达式本身相同的,如果你会用javascript写正则,那么一定也很快会使用java写正则,两门语言对正则的支持都很完美,几乎支持正则中的所有功能,我所有项目中使用的正则没有匹配不了的。两门语言在现代机器上执行效率都很好。
数组,javascript只支持一维数组,但是可以模拟出多维数组:定义如下:
var mutipleArray = [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]];
for(var i=0;i<mutipleArray.length;i++)
{
for(var j=0;j<mutipleArray[i].length;j++)
{
console.log(mutipleArray[i][j]);
}
console.log("**************************");
}
java的数组,可支持多维数组,但一般用得少一点,一般都用List借口的实现类顶替。
javascript的数组,什么都可以存储,无论是对象,函数,原始类型,没有要求的,所谓类型不安全!
java的数组只能存储特定的类型,java.lang.Object,可以存任何对象类型,特例不要钻牛角尖,基本类型与Object类型混合存就不行,自动打包的功能不要说,这也是特例。
从上面的比较来看,java与javascript的数组,不太一样,语言本身就决定了他们两连使用都不能相通。javascript数组有队列,排序,删除指定序列的操作功能,我的理解一个大杂烩,用数组的功能也可以实现类似list,map,迭代等等功能,参见jquery框架。java的队列有专门的实现类。并且java在这方法提供的数据结构要远远比javascript丰富。
再来说选择结构,javascript的选择结构语法貌似与java相同,javascript的功能要更强大,貌似什么值都行。java只能是数值型的,用得反而少,java这点实现不太好。jdk5后有枚举改善了不少。因此,选择结构也不相通。
循环函数,没看懂,你要说的是循环控制语句,这两个倒是基本一样,差别是:
java编列数组(也包括list的实现类这么写的):
for(Object o : objArr)
{
System.out.println(o);
}
而javascript中类似的结构,是遍列对象用的:
for(var p in obj)
{
//如果obj是数组,p是数组的索引,obj[p]是数组的值
//如果obj是对象,p是对象的属性(有可能是对象域名称或方法名称,obj[p]是对象域值或对象方法)
console.log(p,obj[p]);
}
现在的js框架中都会有foreach迭代,类似java迭代的用法,注意循环!如jquery中的each。
//这不是语言提供的功能,别人重新封装出来的。
$.each(arr,function(i,item){
console.log(item);
});
综上所属,java与javascript差别很大。包括楼主你想知道的问题,差别都很大。
希望我写这么多能帮到你。
首先说明两门语言不一样,除了有java这个字,语句块的表达一样外几乎没啥共同性。javascript只因单年java太流行,自己也跟着有个java的名称,设计javascript的人初衷的确想弄的跟java一样,但是做不到。
javascript是解释执行的,需要宿主环境来执行,比如浏览器就是一个宿主环境,node.js提供的javascript也是个宿主环境,还有adobe pdf也提供了javascript的宿主环境,javascript的宿主环境很多,windows office 苹果的store有。再余下的还有不知道了。
java编译执行的,最先设计用来,给美国的有线电视机顶盒,写控制代码,发明之初100多两百个类,比现在好学,运行环境要求也不严格。很小的内存,很少的cpu资源就可以跑起来,怀念可惜这方面的功能我不会用。后来java的设计团队觉得,java应该有更大作为。在浏览器开发设计盛行的90年代,java的设计者用java开发过浏览器,在浏览器上发展applet,可惜微软不待见java,java在浏览器方面的努力,再牛(我看过很多java方面的书,很多设计理念都很好,只可惜运行平台不是自己的),也失败了。最终java实现了跨平台发展,这才是java的活力所在。所谓跨平台虚拟机也要有人提供,sun公司自己写的虚拟机还行。见过hp-unix上跑的虚拟机问题不少!!!
javascript规范里面说明,javascript是非类型安全的。而java是类型安全的,区别很大。
上个例子:
js:
var myLover = true;
console.log(myLover);
myLover = "myself";
console.log(myLover);
js这样写不会有问题的,同一变量可存储逻辑值,也可存储字符串。甚至再放函数引用也行,对象引用也可以。
java:
public class TestDriver {
public void main(String[] args)
{
String s = "myLOver";
//下面会出错的,编译都通不过,s只能存储字符串型的数据,这就是所谓的类型安全!
//s = true;
System.out.println(s);
}
}
java我的理解一门真正的编程语言,语法结构严谨,必须按照一定规则写,否则就是错误。javascript语法松散,缺个;没事的,javascript支持运行时的动态特性,比如运行时添加方法,成员等等。java没这特性,java的运行时动态性,我知道的主要是反射(牺牲了语言的安全性,很多功能都依赖反射,还不好理解!),比如动态代理,json、xml、orm框架实体与数据之间的自动转化都需要反射支持。反射不安全在于,可以随便访问类或实例的任何成员,任何方法,包括申明为private的域与方法。
铺垫了这么多,来回答你想知道的问题。
先说函数,函数只有javascript中才有,java中绝对没有函数。java是真正面向对象的语言,要想使用的基本功能,在java.lang与java.util这两个包中去找,全部是以类的方式提供。这里没有绝对,函数也好,类中的方法也好,实现思路有可能是通用的。javascript也可以实现面向对象编程,但我见到老点的代码,都函数式面向过程编程。直到学jquery的时候才看到面向对象编程方法。但我不喜欢,jquery的扩展方式。javascript面向对象方式amd值得推崇,dojo框架用的就是amd,还有国内阿里的前端工程师更牛融合jquery与amd的优点,自己创建了一个效率很不错的框架。
再说正则表达式:
js里面的正则表达式两种方式使用:
第一、用法较常见,包括js框架中都这种用法,我采纳的这种用法。
var regExp = /^http:\/\//gi;
var isUrl = regExp.test("http://www.baidu.com/register");
console.log(isUrl)
第二种、用正则表示对象,这块不常用,要写样例还需要查api参考,不给了。
java常用的正则表达式也是两种:
第一种、java.util包中提供的,这个也要查api不谢样例了;
第二种、第三方提供的,传说效率很高,我倒是没发现。名字忘记了,我一般用spring中用的那个,平时写的程序不在这台电脑上,不好查,抱歉。
javascript 与 java的正则表达式本身相同的,如果你会用javascript写正则,那么一定也很快会使用java写正则,两门语言对正则的支持都很完美,几乎支持正则中的所有功能,我所有项目中使用的正则没有匹配不了的。两门语言在现代机器上执行效率都很好。
数组,javascript只支持一维数组,但是可以模拟出多维数组:定义如下:
var mutipleArray = [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]];
for(var i=0;i<mutipleArray.length;i++)
{
for(var j=0;j<mutipleArray[i].length;j++)
{
console.log(mutipleArray[i][j]);
}
console.log("**************************");
}
java的数组,可支持多维数组,但一般用得少一点,一般都用List借口的实现类顶替。
javascript的数组,什么都可以存储,无论是对象,函数,原始类型,没有要求的,所谓类型不安全!
java的数组只能存储特定的类型,java.lang.Object,可以存任何对象类型,特例不要钻牛角尖,基本类型与Object类型混合存就不行,自动打包的功能不要说,这也是特例。
从上面的比较来看,java与javascript的数组,不太一样,语言本身就决定了他们两连使用都不能相通。javascript数组有队列,排序,删除指定序列的操作功能,我的理解一个大杂烩,用数组的功能也可以实现类似list,map,迭代等等功能,参见jquery框架。java的队列有专门的实现类。并且java在这方法提供的数据结构要远远比javascript丰富。
再来说选择结构,javascript的选择结构语法貌似与java相同,javascript的功能要更强大,貌似什么值都行。java只能是数值型的,用得反而少,java这点实现不太好。jdk5后有枚举改善了不少。因此,选择结构也不相通。
循环函数,没看懂,你要说的是循环控制语句,这两个倒是基本一样,差别是:
java编列数组(也包括list的实现类这么写的):
for(Object o : objArr)
{
System.out.println(o);
}
而javascript中类似的结构,是遍列对象用的:
for(var p in obj)
{
//如果obj是数组,p是数组的索引,obj[p]是数组的值
//如果obj是对象,p是对象的属性(有可能是对象域名称或方法名称,obj[p]是对象域值或对象方法)
console.log(p,obj[p]);
}
现在的js框架中都会有foreach迭代,类似java迭代的用法,注意循环!如jquery中的each。
//这不是语言提供的功能,别人重新封装出来的。
$.each(arr,function(i,item){
console.log(item);
});
综上所属,java与javascript差别很大。包括楼主你想知道的问题,差别都很大。
希望我写这么多能帮到你。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询