JS很多地方和C/Java很像,只记录一些有意思的部分。
语法
1.区分大小写。JS常和PHP,HTML混用,PHP一般是不区分大小写的,所以容易搞错。
2.标志符。基本和C一样。按照惯例,javasript使用驼峰大小写格式,即除第一个单词外的其他有意义的单词首字母大写。,虽然不是强制,但是规范化是很好的习惯。
3.注释,类同C。
3.语句,Javascript的语句已分号结尾,但是可以省略分号,有解析器确定语句的结尾。一般不要省略分号。使用代码块,在需要的地方,即使只有一句语句,也最好使用代码块。
4.Javascript的关键字:
break case catch continue default delete do else finally forfunction if in instanceof new return switch this throw try typeof var vois while with
Javascript的保留字,虽然还没有任何特定用途,但是可能在将来作为关键字
abstract Booleanbyte char class const debugger double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized
保留字大多是关于面向对象方面所需要的。
变量
ECMAscript使用松散类型,类似于PHP,每个变量只是一个保存值的占位符。定义变量时使用var关键字,类似于PHP。
var msg = "hi";
这样定义的变量并不会被标记为字符串类型,初始化只是赋给变量一个值那么简单。可以在修改变量值的同时修改变量类型。这样做虽然是有效的但是不被推荐。
同其他语言,JS 变量也有作用域,在函数中定义的变量,在函数执行结束后被销毁,但是比较有意思的是在for语句中定义的变量不会在for语句块结束时被销毁。如果不是用var关键字则为全局变量,虽然这样做可行,但是也是不被推荐的,因为这样很难管理与维护。
可以在一条语句定义多个变量。
数据类型
JS是松散类型的,要知道数据的类型可以使用typeof操作符来获得。
typeof操作符的返回为以下字符串之一:
undefined--未定义的值
Boolean--布尔值
string--字符串
number--数值
object--对象或者null
function--这个值是函数
有很多和C/Java不同的东西。
要要成显示初始化变量的习惯
undefined类型和null都是只有一个值的变量类型。那就是undefined和null自身。
null表示一个空对象指针。typeof(null)返回"object";
undefined是派生自null的,一次如下语句返回true
alert(null == undefined);//return "true";
Boolean是ECMAscript用的最多的一种类型。值得注意的是:Boolean是区分大小写的,即只有true和false才是Boolean值,如True,TRUE,False等都不是Boolean值,而只是普通标志符。
同时存在一个转型函数:Boolean(var);将一个值转换为Boolean值;
使用时,任何非空的字符串,非零的数字值,任何对象(除去null)的值都是true,而空字符,0和NAN,null及undefined转换后为false。
Number类型
整数与C语言一些类似,有意思的是JS的八进制输入如果是无效的八进制值则不作为八进制解析而自动转换为10进制。如下
var nu1 = 070;//八进制,表示十进制的56;
var nu2 = 089;//无效的八进制,解析为十进制的89;
var nu3 = 08;//无效的八进制值,解析为十进制的8
浮点数,没什么特殊的,记住永远不要测试一个浮点数的值。要比较两个浮点数的大小使用两个数相减的方法。
var nu1 =
0.1;
var nu2 = 0.2;
alert(nu2 + nu2 == 0.3)//return
false;
alert(bu2 - nu1 == 0.1);//return true;
注意如果计算的结构超出了JS的数值范围,正数会自动转换成Infinity(无穷)值,负数会转换为-Infinity(负无穷)值。
Infinity值不能再参与计算,要确定一个值是不是无穷的使用isFinite()函数,如果值为无穷则返回true。
进行极大极小值计算时,监控是否越界是可能的也是必须的。
NaN类型
即非数值,Not a Number。在JS中任何数除以0都返回NAN.
NaN有两个特点:任何涉及NaN的操作都返回NaN,NaN不予任何值相等,包括NaN自身。
alert(NaN == NaN);//返回false
函数isNaN()可以确定一个值是不是数值。
isNaN也可以用于对象,首先调用对象的valueOf()方法,如果不能确定是不是数值,在调用toString()方法。
数值转换:Number(),parseInt(),parseFloat()方法
Number()的参数为任意值。
parseInt(),parseFloat()则把字符串转换为数值。
用实例说话:
var num1 = Number("Hello world");//NaN
var num2
= Number("");//0
var num3
= Number(0000123);//123
var num4
= Number(true);//1
var
num5 = parseInt("12345");//12345
var
num6 = parseInt("123ddfa");//123
var num7
= parseInt("h123");//Nan
var num8
= parseInt("070");//56
var num9
= parseInt("22.2");//22
指定基数的转换,parseInt可以指定第二个参数为转换的进制,如下:
var num1 = parseInt("010");//8
var num2 = parseInt("010", 10);//10
var num3 = parseInt("010", 16);//16
parseFloat类似
string:
有意思的知识是是数值,布尔值,对象,字符串都有一个toString()方法。并且数值在调用toString()时可以添加一个参数表示返回已几进制表示数值,在转换为String。例如:
var num1 =
10;
num1.toString(2);//"1010"
Object
以后再说
操作符
比较有意思的:
var result = "a" < 3;//false
var result = "23" < "3";//true
var result = "23" < ;//false
"=" "=="
"==="的区和PHP类似
?:操作符与Java相似。
语句
注意:ECMAScript不存在块及操作,在循环内部定义的变量可以在外部访问。如:
var count = 10;
for(var i = 0; i < count; i++) {
alert(i);
}
alert(i);//alert(10)
Java中的foreach语句在JS中为for(a in b),其他类似。
label语句,和goto有点相似
switch语句可以使用任何数据类型,case的值不一定是常量,可以是变量甚至是表达式。
函数
JS 函数的定义与PHP有点相似,使用function关键字定义。
function fuc_name(args) {};
关于返回值的推荐做法是:要么让函数始终返回一个值,要么永远不要返回值。有时返回有时不返回会给调试带来不便。
ECMAScript不再意传递的参数的个数与类型。调用函数是可以是一个也可以是两个三个,或者没有,即使定义的时候是有参数的。也可以在定义是不知名参数的名字,而使用时用arguments[]数组来指定。
JS的函数没有签名,因此也没有重载,对于定义的名字相同函数,该名字只属于后定义的函数。
通过传入参数的个数和类型可以模仿方法的重载
(完)