== 普通的英文半角空格

  ==   ==   == no-break space (普通的英文半角空格但不换行)

  == 中文全角空格 (一个中文宽度)

  ==   == en空格 (半个中文宽度)

  ==   == em空格 (一个中文宽度)

  == 四分之一em空格 (四分之一中文宽度)

相比平时的空格( ),nbsp拥有不间断(non-breaking)特性。即连续的nbsp会在同一行内显示。即使有100个连续的nbsp,浏览器也不会把它们拆成两行。

更多请详见:http://zh.wikipedia.org/wiki/%E7%A9%BA%E6%A0%BC

使用Javascript停止元素事件的传播。非常简单,看代码:

function stopPropagation(e) {
    if (e && e.stopPropagation) e.stopPropagation(); //W3C;
    else window.event.cancelBubble = true; //only ie;
}

<div onclick="alert('div000000000000');">
DIV 000000000000000000
    <a onclick="alert('div1111111'); stopPropagation(event);" href="javascript:void(0);">DIV 111111111111</a
</div>

使用Javascript取消浏览器的默认动作。无话可讲,看代码:

function preventDefault(e) {
    if (e && e.preventDefault) e.preventDefault(); //W3C;
    else window.event.returnValue = false; //only ie;
}

<a onclick="preventDefault(event);" href="http://www.google.com" target="_blank">www.google.com</a>

非IE浏览器增加 contains 方法:

if (typeof (HTMLElement) != "undefined") {
    HTMLElement.prototype.contains = function (element) {
        while (!!(element && element.nodeType == 1)) {
            if (element== this) return true;
            element= element.parentNode;
        }
        return false;
    }
}

在 mouseover 事件执行时先进行如下判断,结果为 true 时再执行方法体:

var element = e.fromeElement || e.relatedTarget; //此处 e 为 mouseover event 事件对象;
if (!this.contains(element)) mouseOverFunc();

在 mouseout 事件执行时先进行如下判断,结果为 true 时再执行方法体:

var element = e.toElement || e.relatedTarget; //此处 e 为 mouseover event 事件对象;
if (!this.contains(element)) mouseOutFunc();

在IE中,所有的HTML元素都有一个contains方法,它的作用是判断当前元素内部是否包含指定的元素。我们利用这个方法来判断外层元素的事件是不是因为内部元素而被触发,如果内部元素导致了不需要的事件被触发,那我们就忽略这个事件。

event.fromElement 指向触发 onmouseover 和 onmouseout 事件时鼠标离开的元素;

event.toElement 指向触发 onmouseover 和 onmouseout 事件时鼠标进入的元素。

那么上面两行代码的含义就分别是:

当触发onmouseover事件时,判断鼠标离开的元素是否是当前元素的内部元素,如果是,忽略此事件;

当触发onmouseout事件时,判断鼠标进入的元素是否是当前元素的内部元素,如果是,忽略此事件;

这样,内部元素就不会干扰外层元素的 onmouseover 和 onmouseout 事件了。

使用 Javascript 的 window.open 方法弹出窗口后,弹出窗口(子窗口)与母窗口之间互相访问对象的方法:

子窗口访问母窗口对象的方法:子窗口使用 window.opener 即引用母窗口,比如:

window.opener.setStr(); //执行母窗口的 setStr 方法;

母窗口访问子窗口对象的方法:母窗口在 window.open 执行时把它引用给一个变量,这个变量既是子窗口的引用,比如:

var w = window.open("new.html"); //变量 w 既是弹出窗口的引用;
w.setStr(); //执行弹出窗口的 setStr 方法;

HTTP 400 – 请求无效

HTTP 401.1 – 未授权:登录失败

HTTP 401.2 – 未授权:服务器配置问题导致登录失败

HTTP 401.3 – ACL禁止访问资源

HTTP 401.4 – 未授权:授权被筛选器拒绝

HTTP 401.5 – 未授权:ISAPI或CGI授权失败

HTTP 403 – 禁止访问

HTTP 403 – 对Internet服务管理器(HTML)的访问仅限于Localhost

HTTP 403.1 – 禁止访问:禁止可执行访问

HTTP 403.2 – 禁止访问:禁止读访问

HTTP 403.3 – 禁止访问:禁止写访问

HTTP 403.4 – 禁止访问:要求SSL

HTTP 403.5 – 禁止访问:要求SSL 128

HTTP 403.6 – 禁止访问:IP地址被拒绝

HTTP 403.7 – 禁止访问:要求客户证书

HTTP 403.8 – 禁止访问:禁止站点访问

HTTP 403.9 – 禁止访问:连接的用户过多

HTTP 403.10 – 禁止访问:配置无效

HTTP 403.11 – 禁止访问:密码更改

HTTP 403.12 – 禁止访问:映射器拒绝访问

HTTP 403.13 – 禁止访问:客户证书已被吊销

HTTP 403.15 – 禁止访问:客户访问许可过多

HTTP 403.16 – 禁止访问:客户证书不可信或者无效

HTTP 403.17 – 禁止访问:客户证书已经到期或者尚未生效

HTTP 404.1 – 无法找到Web站点

HTTP 404 – 无法找到文件

HTTP 405 – 资源被禁止

HTTP 406 – 无法接受

HTTP 407 – 要求代理身份验证

HTTP 410 – 永远不可用

HTTP 412 – 先决条件失败

HTTP 414 – 请求–URI太长

HTTP 500 – 内部服务器错误

HTTP 500.100 – 内部服务器错误–ASP错误

HTTP 500-11 – 服务器关闭

HTTP 500-12 – 应用程序重新启动

HTTP 500-13 – 服务器太忙

HTTP 500-14 – 应用程序无效

HTTP 500-15 – 不允许请求global.asa

Error 501 – 未实现

HTTP 502 – 网关错误

function jsonDecode(data) {
    return new Function("return " + data + ";")();
}
var jsonObj = jsonDecode('{ name: "名字", age: 24 }'); //调用方法
alert(jsonObj.name + ":" + jsonObj.age);

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

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

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

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

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

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

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

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

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

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

var result;
(result = 5, function () { alert(result * 6); })(); //结果会弹出30

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

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

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

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

主要代码:

(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;
})();

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

主要代码:

String.prototype.removeRepeats = function () {
    var str = this;
    while (str.match(/(.).*?\1/g) != null) str = str.replace(RegExp.$1, "");
    return str;
}

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

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