Javascript开发需要namespace和错误调试

Posted in javascript on September 1st, 2010 by Adam

做Javascript开发我想最头痛的就是这两方面了:变量的冲突和错误的调试问题。
为了避免在不同js脚本中的变量相互冲突,我们需要用到namespace。下面是一简单的例子:

var ZED = new function() {
//私有内部变量和函数,无法调用
var privateFunction = function() {
alert(‘privateFunction’);
};
//公有内部变量和函数,可以调用
this.publicFunction = function() {
alert(‘publicFunction’);
};
};

变量不冲突了,还要确保错误信息的正常反馈,有利于程序的调试,这样才能让Javascript开发做到游刃有余。
常用的错误调试有两种:window.onerror和try{}catch(e){}模块
下面是简单的例子:
onerror的好处在于容易找到错误的地方,但是不兼容主流的浏览器,除了IE和FireFox

var arrErrors = new Array();
window.onerror = function (strErr, strURL, strLineNumber){
var strMess = “URL: ” + strURL +
“\nline number: ” + strLineNumber +
“\nError Message: ” + strErr;
arrErrors.push(strMess);
alert(arrErrors.join(“\n__________\n\n”));
return true;
}

try.catch的好处在于兼容主流的浏览器,但是错误的信息不足,造成调试困难

try{
with(ZED){
privateFunction();
}
}catch(e){
alert(“Name: ” + e.name + “\nDesc: ” + e.description + “\nMsg: ” + e.msg);
}

参考调式工具: Javascript Stacktrace

var lastError;
try {
ZED.privateFunction();
} catch(e) {
lastError = e;
}
alert(printStackTrace().join(‘\n\n’));

escape、encodeURI、encodeURIComponent的区别

Posted in javascript on August 17th, 2010 by Adam

escape、encodeURI、encodeURIComponent的区别主要在于编码的字符不同:

原始字符串:09az~!@#$%^&*()_+}{“:|<>?`-=[];’,./ 好的
escape字符串:09az%7E%21@%23%24%25%5E%26*%28%29_+%7D%7B%22%3A%7C%3C%3E%3F%60-%3D%5B%5D%3B%27%2C./%20%u597D%u7684
encodeURI字符串:09az~!@#$%25%5E&*()_+%7D%7B%22:%7C%3C%3E?%60-=%5B%5D;’,./%20%E5%A5%BD%E7%9A%84
encodeURIComponent字符串:09az~!%40%23%24%25%5E%26*()_%2B%7D%7B%22%3A%7C%3C%3E%3F%60-%3D%5B%5D%3B’%2C.%2F%20%E5%A5%BD%E7%9A%84

escape() 不会转码 0到9a到z@*/_+.- 其他会被转码成%20的形式,中文则是%u597D的形式,属于ISO Latin字符集编码。

escape() 更加适合于QueryString中等号后面的英文数据的转码,例如:action=eacape(‘wo&ta’)&list=1;

encodeURI() 不会转码 ~!@#$&*()_+:?-=;’,./ 其他会被转码成%20的形式,属于UTF-8编码。

escape() 更加适合于GBK到UTF8页面的转码,同样页面编码的用escape就可以

encodeURIComponent() 不会转码  ~!*()_-’. 把采用UTF-8编码格式的字符串用escape的Latin字符编码。

encodeURIComponent()适合于URL不会被#字符截断,URL被当作URI字段的编码,因为/可以被转码。

URL里常用的字符:?=&#    所以encodeURI适合保持URL合法性,但是要转码URL的情况。空白在escape()被转成+,其它都是%20。

分享 – 20100814

Posted in javascript on August 14th, 2010 by Adam

网页技术的真正革命是Javascript,希望则是HTML5和WebGL。
bullet.js – Javascript Ragdoll Physics 基于Bullet的游戏Javascript物理引擎实例 – 布娃娃 by pl4n3
Jquery新的手机框架- 支持系统包括iOS, Android, Blackberry, Samsung Bada, Windows Phone 7, Palm WebOS, Symbian, MeeGo
WebGL的隧道效果 – Blender to Actionscript的小工具就是他开发的。
JS1K competition Javascript一千个字节竞赛:挑战Javascript的极限

Tags:

Javascript错误:Expected identifier, string or number

Posted in javascript on August 2nd, 2010 by Adam

一段Jquery调用
$.get(“tag.php”,{act:’list’,class:’id’},function{});
在IE8下出现如下错误:
Error Message: Expected identifier, string or number
原因是class被看作是IE的保留字,修改一下即可。

另外一个问题:
安装Zenmap扫外网时电脑突然断线无法上网,并且无法访问网关192.168.1.1,不过内网一切正常,症状很像arp病毒,但是在网关重新绑定静态mac地址后,一切正常。

Tags: ,

Jquery对Select的操作说明

Posted in javascript on June 9th, 2010 by Adam

最近要用到Jquery对Select的操作,总结一下,以备参考:

  • 获取Select长度: $(“#select option”).length、所选长度:$(“#select option:selected”).length or size()
  • 取得序号
    $(“#select option”).index($(“#select option:selected”))
  • 获取Option显示的文字:$(“#select option:eq(“+i+”)”).text() – i是option的序号
  • 获取Option的value:$(“#select option:eq(“+i+”)”).val() 或者attr(“value”)
  • 清除所有Option:$(“#select”).html(“”);
  • 删除Option
    $(“#select option:eq(“+i+”)”).replaceWith(“”); – i是option的序号
    $(“#select option:eq(“+i+”)”).remove();
  • 改变选择的Option
    $(‘#select option:selected’).removeAttr(‘selected’);
    $(‘#select option[value='+i+']‘).attr(‘selected’,'selected’);
  • 增加Option
    $(“<option value=’”+value+”‘>”+name+”</option>”).appendTo(“#select”);
  • 通过value选定Option
  • $(“#select”).val(“zhaiduo”).attr(“selected”, “selected”);
Tags:
RSS Feed