JavaScript的基本语法和C以及Java非常相似,下面介绍JavaScript比较特殊的地方。
一、变量声明
JavaScript语言是动态类型,创建JavaScript变量不需要声明类型(这点几乎所有脚本语言都一样)。但创建JavaScript变量需要在变量前加上var。
var n = 20;
二、对象创建
var empty_object = {};
var stooge = {'first-name': 'Jerome', last_name: "Howard"};
如果属性名是合法标识符,可以不加引号。
获得对象属性值有两种方式。
stooge['first-name’];
stooge.last_name;
如果对象没有该属性,则返回值为undefined
每个对象都有原型(prototype),直接创建的字面对象连接到Object.prototype。
三、foreach语法
foreach用于数组时,将遍历数组下标。
foreach用于对象时,将遍历对象属性。
for(x in [6,6,6,6,]) {
console.log(x); // document.writeln(x);
} // 将输出 0 1 2 3
for(x in stooge) {
console.log(x);
} // 将输出 first-name last_name
四、delete
delete用于删除对象属性。
delete stooge['first-name'];
delete stooge.last_name;
五、函数
var add = function(a, b) {return a+b;};
函数中可以直接使用arguments和this。
arguments是参数数组。
当函数为对象属性时,this绑定到对象上。
当函数不是对象属性时,this绑定到全局变量。
函数还可以用apply调用:
add.apply(null, [2, 3]); // 结果为 5
Function.apply(a, b)其中a绑定到this,b是参数数组。
六、构造函数
如果在函数前面带new调用,将创建一个新对象,该对象连接到函数的prototype,函数和prototype的方法中,this都绑定到这个新对象。
Function.prototype.method = function(name,
fun) {
this.prototype[name] = fun;
return this;
};
Number.method('integer', function() {
return Math[this < 0 ? 'ceiling', 'floor'](this);
});
console.log((-10/3).integer();
在执行过程中,Function中的this为Number,Number中的this为(-0.3333)。
七、作用域
JavaScript有函数作用域,但没有块级作用域。
内部函数可以访问外部函数的参量和变量,除了this和arguments。
var add_the_handlers = function(nodes) {
var i;
for(i=0; i<nodes.length; i+=1) {
nodes[i].onclick = function(i) {
return function(e) {
alert(i); };
}(i);
}
};
如果你只写node[i].onclick = function(e) { alert(i); };
由于内部函数并不会复制外部函数中的变量,导致最后运行时所有的i都为nodes.length。
八、正则表达式
reg = /(\d+)([a-zA-Z]+)/;
reg.exec('abc123def456');
如果不能匹配将返回null。
还可以用test:
reg.test('abc123def456');
如果成功匹配将返回true,否则返回false。
另外string.match几乎和exec相似。
'abc123def456'.match(reg);
string.replace还可以替换字符串:
'abc123def456'.replace(reg, '’); // 将得到 abc456
'abc123def456'.replace(reg, function(a,b,c,d,e) { return 'A'; }); // 将得到 abcA456
function的参数,依次对应为reg.exec('abc123def456’)结果里的每一项。
另外reg后面可以加g、i、m
reg = /(\d+)([a-zA-Z]+)/gim;
G表示全局,I表示大小写不明感,M表示多行。