现在的位置: 首页 > 综合 > 正文

js与java的一些区别

2017年11月20日 ⁄ 综合 ⁄ 共 3152字 ⁄ 字号 评论关闭

js的语法比java简单,但是我总感觉js代码看的很吃力,学的也很郁闷。现在买了本javascript权威指南,打算从头学起。这里就顺便当做笔记了。

 

程序设计首先得搞明白数据类型。js中有数字、布尔值、字符串、函数、对象、数组、null、undefined这几种类型。

 

关于数字:

js的数字并不区别整型还是浮点型,js中所有数字都是浮点型表示,可以认为是其他语言中常用的double型。另外js能识别十六进制和八进制的直接量。如0xff(0x开头为十六进制),0377(0开头为八进制数,但是最好不要这么蛋疼的用)。通常咱无论整数还是浮点数都直接在js中用就ok。js还支持指数计数法表示的浮点型直接量,如6.02e23//e23就是10的23次方。数字除了支持 —、+、*、/,js还有很多算数函数保存在Math对象中。

 特殊的数值有 Infinity无穷大,负无穷大则是-Infinity,还有NaN,意为非数值。可以用一个专门的函数isNaN()来检测这个值。还有isInfinity();

 

关于字符串:

js支持Unicode字符,注意js没有char类型,所有字符都是字符串。用"" 或者''括起来。如果字符串中包含"或者',注意使用 \ 转义。 js字符串的内部特性之一就是支持+连接字符串。字符串有length属性,还有charAt()方法。还有subString(start,end)方法,indexOf('')方法。

 

数字转换成字符串:

当数字与字符串做+运算时,数字会转换成字符串。如100+”万"结果就是"100万"。由此可以得出一个将数字转化成字符串的简便方法,如 var n=100; n=n+'';则n就转化成了字符串。''就是一个空字符串。 其他的显式转换可以使用String(number)方法。还可以使用number.toString()方法,这个得是Number对象(似乎数字就是Number对象),该方法有参数,用来如2、8、16,表进制。还可以调用toFixed()方法格式化显示数字。

 

字符串转换成数字:

当字符串用于数字环境中时,它会自动转换成数字。比如 var n= '2' * '33'。则n的值为数字66。利用这个特点,将字符串转数字的简便方法就是 var s='55';  s=s-0;则s就变成了数字55。切记如果是给字符串+0,那么这个运算过程就是字符串连接,相当于+'0'。

要允许更灵活的转换,可以使用parseInt()和parseFloat()。具体用法见书本p38.

 

布尔值:

没什么好说的,true和false。关于布尔值的转换,往往是自动转换。用于数字环境,true为1,false为0。用于字符串环境,则true为'true',false为'false'。 值得注意的是,如果一个数字用于布尔值环境,那么如果该数字是0或者NaN,它就转成false,否则为true。而如果是字符串用于布尔值环境,则空字符串为false,非空为true。空值和未定义的值也会被转成false,而任何非空对象、数组、或函数都转换成true。

如果想显式转换,使用Boolean(x)函数。还有一种简便方法是!!运算符。不解释。

 

函数:

通常的定义方式为 function square(x){

                                     return x*x;

                                 }

得有个function关键字。有一点必须特别强调,在js中函数是真正的数值,它可以被存储在变量、数组、对象中,而且函数还可以作为参数传递给其他函数。当函数被赋值给某个对象的属性时,那么就等于该对象有了一个对应属性名的方法。

关于方法与函数的区别,我自己粗陋的理解为类外面的叫函数,类里的叫方法。所以java没有函数只有方法,因为java一切都在类里。而C和C++就有函数。

函数也可以有直接量,如:

var square= function(x){return x*x;}

这个特性比较重要。

还有一种蛋疼定义函数法:

var square = new  Function{"x","return x*x"};//火星人喜欢这么用,地球人忘了它吧

 

对象:

js中的对象可以作为关联数组使用。如果采用这种方式,那么访问对象的属性就要采取不同的语法。比如image.width,此时可以用image["width"]。

对象也有直接量,比如:

var point = { x:2.3,y:-1.2};对象直接量也可以嵌套。最后要说明的是对象直接量使用的属性值不必是常量,它可以是任意js表达式。而且对象直接量中的属性名可以是字符串而不是标识符。哈哈这不就是json格式吗?

 

对象转换:

当非空对象用于布尔环境时,它自动转换成true。当对象用于字符串环境,js会调用该对象的toString()方法,并且使用该函数的返回值。当对象用于数字环境,js首先调用该对象的valueOf()方法。如果该方法返回一个基本类型的值,则这个值会被使用。然而大多数情况下valueOf()返回的是对象自己,故js首先使用toString(),然后valueOf()。

 

数组:

js的数组可以存放任意js类型。包括其他数组、对象或者函数的引用。关联数组与常规数组是有区别的,常规数组用数字下标,关联数组则用字符串作下标。由于js是非类型语言,故数组中的元素类型不必一致。

数组声明: var arr= new Array();然后可以单独为每个元素赋值。也可以在声明时赋值: new Array(1,'ok',3,true,{x:1,y:4});

js数组感觉就是java中数组与Arraylist的结合体。兼具两者优点。

如果只向Array()构造函数传递一个参数,那么该参数是指定数组的长度。

数组也有直接量,比如:

var array = [1.2,'javascript',true,{x:1,y:2}];

数组亦可嵌套:

var  matrix=[[1,2,3],[4,5,6],[7,8,9]];  虽然js不支持多维数组,但是这么一嵌套,就成了多维数组。而且js中数组直接量 的元素不必仅限于常量,它可以是任意表达式:

var base=3;

var table=[base,base+1,base+2];

甚至你可以在数组中存放未定义的元素,比如var unkown=[1,,5];     //2号元素就是未定义的

这么宽松的语法正是js令我头痛之处啊,郁闷。当然这也是js强大之处。

 

null:

没啥说的,当它处于bool环境时它被转换成false,当用于数字环境时它被转换成0;当用于字符串环境,它被转换成'null'。

 

undefined:

js偶尔会用一下这个。在使用了一个并未声明的变量时,或者使用了已经声明但是没有赋值的变量时,又或者使用了一个并不存在的对象属性是,返回的就是undefined。注意它并不等同于null。但是==运算符却将两者看做相等。如果你想区分null和undefined,可以使用===运算符和typeof运算符。

undefined还有一点与null不同,null是js的保留字,而undefined不是。它是js的一个全局变量,它的初始值是undefined。

当用于布尔环境,false。用于数字环境,NaN。用于字符串环境,'undefined'。

 

js中也有Date对象。还支持正则表达式,RegExp对象,它支持直接量,一对斜线 /这是正则表达式/ 之间的文本就是一个正则表达式直接量。js也有Error对象。

 

详细的类型转换对照表可以参考书本P47。

 

看到js的语法是如此的宽松,你是否想到了js代码的各种稀奇古怪的写法了呢?

抱歉!评论已关闭.