一、概括
javascript是浏览器的广泛支持的脚本语言,接收用户事件,处理web文档内容。下文没有提到的基本语法要素基本与c语言相同。
二、词法结构
2.1、支持unicode。
2.2、大小写敏感,忽略空白符,和C++兼容的注释。
2.3、不同行代码之间的分号是可选的。
2.4、标识符开头可以是$,字母,下划线。
三、基本数据类型
js是动态语言,数据类型是动态推定的。
3.1、数字类型
3.2、字符串,单引号字符串和双引号字符串
3.3、BOOL类型,true 和 false
3.4、NULL
3.5、undefined
四、变量定义
4.1、变量用var定义
4.2、变量作用域范围是函数,没有类似与C语言的块级作用域
五、表达式和运算符
5.1、>> 算术右移,>>> 逻辑右移
5.2、===,!== 不进行类型转换的强类型对象的相等性判断。
六、语句
6.1、for(var in array){}
6.2、try{throw;}catch(e){}finnally{}
6.3、with语句临时改变名称空间。
七、函数
js中的函数是非常灵活的,既支持函数式编程,也和对象的生成有这紧密的联系。
7.1、普通的函数定义
function add(x,y){ return (x+y);}
7.2、js的函数是可以嵌套的,可以把js函数看成是一个特殊的语句块,可以出现在程序的其他函数或者语句之中。
function fun1(){ var str1="string in fun1"; fun2(); //嵌套在函数里的函数可以在外围函数中任意位置调用 function fun2() { var str2="string in fun2"; fun3(); function fun3() { var str3="string in fun3"; alert(str1);//里层函数外围函数变量的访问权--闭包 if(2 > 1) { function fun_in_if() { alert("function in if"); } fun_in_if(); //在语句里建立的函数只能在函数定义位置后对其调用 } } }}
7.3、匿名函数
var f1=function(){alert("anonymous function!")};var f2=new Function("x","alert(x);"); //最后一个为函数体f1();f2(100);
八、对象
8.1、js中的对象就是hash(属性与值的映射)
var obj1={};//空对象var obj2={"first":2,"second":2,"third":3};alert(obj2["first"]);alert(obj2.third);for(var1 in obj2){ alert(var1);}
8.2、函数当做构造函数
每个函数被调用时,都会默认传入一个this应用,函数可以对这个对象的引用this进行操作,当用new调用这个函数时就会产生一个对象,当然也可以用return返回其他对象。
function person(age,country){ this.age=age; this.country=country; p2={"age":31,country:"japan"}; return p2; //如果没有return,则返回this。}var p1=new person(28,"justsong");alert(p1.age);alert(p1.country);
8.3、函数的this参数
function person(age,country){ this.age=age; this.country=country;}var p1=new person(28,"justsong");alert(p1.age);alert(p1.country);person.call(p1,31,"japan"); //修改年龄和国籍,通过call把对象引用传递给thisalert(p1.age);alert(p1.country);
8.4、原型继承
js中的对象不是建立在类的基础上的,不是现有类后有对象,而继承的机制也是通过直接继承对象来实现的。
var obj1={"first":1,"second":2}; function createobj(age,country){ this.age=age; this.country=country;}createobj.prototype=obj1; //实现继承var obj2=new createobj(28,"china");alert(obj2.age);alert(obj2.second);