javascript的小括号“()”表达式可以帮助我们把javascript语句组合分块并且每对小括号都会返回一个值且在同一语句中具有优先执行权。例如:

[code lang=”js”]
var result, result2;
result = 5 * (2 + 3); //这是一个表达式,分别进行了加法和乘法的运算,结果是25。
alert(result2); //result2等于undefined,声明变量时并未赋值。下面的小括号表达式在此时并未执行,因为此时执行的alert操作是一个语句,下面的小括号表达式是另一语句,产生了两个语句,小括号只有在同一语句中才具有优先执行的权利。
(result2 = 6); //result2等于6。
[/code]

javascript会先执行小括号内的运算,2+3=5并把5返回然后在执行小括号外的运算,也就是5*小括号返回的5,结果是25。数学都学过,相信很容易理解。

小括号内不能声明变量并且不会改变括号内所执行语句的域。例如:

[code lang=”js”]
function a() {
(function _b() {});
alert(_b); //程序会报错,_b并未声明
}
function b() {
var _b;
(_b = function () {});
alert(_b); //结果是function () {}
}
a();
b();
alert(_b); //程序会报错,_b并未声明,上面b函数中的_b与此_b处不同的域。
[/code]

小括号表达式可以执行多条语句,每条语句用逗号结束,会返回最后一条语句执行结果的返回值。例如:

[code lang=”js”]
var a, b, c, result;
result = (a = 1, b = 2, c = 3, a * (b + c)); //小括号内会依次执行a变量的赋值、b变量的赋值、c变量的赋值、b变量加c变量的结果乘以a变量的操作并把结果返回赋值给result变量。
alert(result); //5
[/code]

小括号把javascript语句组合分块且不能声明变量,如果未遇到逗号或结束右括号则认为是一条语句。所以小括号括起来的匿名函数即使javascript引擎解析到}时也不会结束语句,所以函数后可以直接用括号使其运行。例如:

[code lang=”js”]
var a, b, c, result;
result = (function () { a = 2; }(), function () { b = 3; }(), function () { c = 4; }(), function () { return a * (b + c); }());
//小括号表达式内依次创建匿名函数并执行,共创建了四个匿名函数且都运行了,最后一个匿名函数运行后会返回运算的值且小括号表达式也会把此值返回并赋给变量result。
alert(result); //14
[/code]

合理利用小括号表达式可以简化程序的开发。例如利用小括号返回值执行匿名函数。例如:

[code lang=”js”]
var result;
(result = 5, function () { alert(result * 6); })(); //结果会弹出30
[/code]

首先程序声明变量result,然后执行小括号语句,result赋值5,创建一个匿名函数,并把这个匿名函数返回,最后直接用括号运行这个匿名函数。

注意:直接使用小括号表达式作为语句开始时此条语句的上一条语句结束时应该有分号,以免出现未知错误。例如:

[code lang=”js”]
var a = function () {
alert(a);
}
(a()); //会报错,上面声明匿名函数后进行赋值操作赋给变量a,这种方式声明的函数后面直接跟一对小括号时小括号的作用是运行这个函数,会认为小括号和函数是一条语句,所以函数结尾处应用引号结束语句。
function b() {
alert(b);
}
(b()); //正常,上面声明的函数是以函数字面量生成的函数而且并未进行赋值操作,javascript引擎解析的时候发现}就会自动结束,所以不用分号结束符也是正常的。
[/code]

Javascript下字符串连接运算的性能普遍不高,通常情况下字符串连接是使用了加法运算符(+)实现的,大部分新版本浏览器已对字符串连接做了优化。IE核心浏览器从IE8开始对字符串连接做了优化,但是IE6、IE7字符串连接未作优化,性能低下。这种情况下通常我们会使用Array对象的Join方法来实现字符串连接提升其性能。

主要代码:

[code lang=”js”]
(function () {
function Buffer() {
this.stringArray = new Array();
}
Buffer.prototype.append = function (str) {
this.stringArray.push(str);
}
Buffer.prototype.toString = function () {
return this.stringArray.join(“”);
}
String.Buffer = Buffer;
})();
[/code]

看演示:http://demo.joyfulboy.cn/js/string/string-append.html

主要代码:

[code lang=”js”]
String.prototype.removeRepeats = function () {
var str = this;
while (str.match(/(.).*?\1/g) != null) str = str.replace(RegExp.$1, “”);
return str;
}
[/code]

利用While循环和正则表达式查找字符串中相同的字符并删除该字符

看演示:http://demo.joyfulboy.cn/js/string/string-removeRepeats.html

GET和POST两种方法都是将客户端数据发送到服务器

HTTP标准认为,POST是用于创建或修改资源,资源的内容会被编录到HTTP请求的内容中。例如:我们要在数据库中插入新的数据或者编辑某一条数据。GET则是用于查询资源。例如:搜索引擎,我们要在数据库中查询一条或多条数据。一个实际的问题,使用GET方法时可能会产生很长的URL,或许会超过某些浏览器与服务器对URL长度的限制,此时则用POST方法。

当请求的URL与收集的数据及HTML表单内输入的字段名称的总长度不超过1024个字符且请求是为了查找资源,HTML表单数据仅用来帮助查找时则用GET方法。

当使用GET方法时表单收集到的数据可能让URL过长或请求是为了创建或修改资源时则使用POST方法。

当页面未声明DTD标准的时候,IE核心浏览器会把块元素的padding和border-width的值算做width之内,无论padding和border- width的值设置多少总宽度都是width的值(总宽度 = width)。非IE核心浏览器会把块元素的padding和border-width的值算做width之外(总宽度 = width + padding + border-width)。

看演示:http://demo.joyfulboy.cn/html/ie_Box.html