本文需要5分钟左右阅读完成,建议收藏以后阅读,里面都是干货,可以亲自试验一下,如果觉得好用可以帮忙点赞转发一下让更多人看到,谢谢!交流学习java大数据可以加群460570824。
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){
returnx*x;
}
得有个function关键字。有一点必须特别强调,在js中函数是真正的数值,它可以被存储在变量、数组、对象中,而且函数还可以作为参数传递给其他函数。当函数被赋值给某个对象的属性时,那么就等于该对象有了一个对应属性名的方法。
关于方法与函数的区别,我自己粗陋的理解为类外面的叫函数,类里的叫方法。所以java没有函数只有方法,因为java一切都在类里。而C和C++就有函数。
函数也可以有直接量,如:
var square=function(x){return x*x;}
这个特性比较重要。
还有一种蛋疼定义函数法:
var square =newFunction{"x","returnx*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}];
数组亦可嵌套:
varmatrix=[[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代码的各种稀奇古怪的写法了呢?