显示标签为“Javascript”的博文。显示所有博文
显示标签为“Javascript”的博文。显示所有博文

星期一, 三月 09, 2009

Javascript: 打印对象

alert() 是我们调试阶段经常使用的方法,可以查看目标变量的值。但是,如果目标变量是对象,如:

var foo = {'key1': 'foo1', 'key2': 'foo2'};
alert(foo);

其显示结果是 [object Object]。这对于调试没有多大用处。再试下这个:

for(myKey in myObj){
alert ("myObj["+myKey +"] = "+myObj[myKey]);
}

虽然可以显示期待的结果,但有点麻烦(或者可以将上面的代码封装在一个方法里)。

对于 Gecko 内核的浏览器,可以使用对象的 toSource() 方法,这是其 Javascript 的一个特性。

alert(foo.toSource());

其打印结果是: ({key1:”foo1″, key2:”foo2″})。

最后,当然不能忘了 Firebug 这个利器:

console.log(foo);

其打印结果是:Object key1=foo1 key2=foo2

星期五, 二月 27, 2009

神奇的浏览器嗅探代码

在 shortest way to test for IE 一文中, 讲述了20个方法嗅探 IE 浏览器 ,其中:

ie = '\v'=='v';

上面的代码是不是很神奇,但重要的是,它确实正确地判断出 IE 浏览器。这是利用浏览器的特性来作出判断的。其它的利用浏览器特性判断的 JS 代码:

ie = !!top.execScript;
ie = /*@cc_on!@*/!1;
ie8 = !!window.XDomainRequest;
IEVersion = 0/*@cc_on+ScriptEngineMajorVersion()@*/;
ff = /a/[-1]=='a';
ff3 = (function x(){})[-5]=='x';
ff2 = (function x(){})[-6]=='x';
safari=/a/.__proto__=='//';
chrome=/source/.test((/a/.toString+''));
opera=/^function \(/.test([].sort);

在 Mootools 1.2.1 里,也是利用浏览器的特性来作出嗅探的:

if (window.opera) Browser.Engine = {
name: 'presto',
version: (document.getElementsByClassName) ? 950 : 925};
else if (window.ActiveXObject) Browser.Engine = {
name: 'trident',
version: (window.XMLHttpRequest) ? 5 : 4};
else if (!navigator.taintEnabled) Browser.Engine = {
name: 'webkit',
version: (Browser.Features.xpath) ? 420 : 419};
else if (document.getBoxObjectFor != null) Browser.Engine = {
name: 'gecko',
version: (document.getElementsByClassName) ? 19 : 18};

Browser.Engine[Browser.Engine.name] =
Browser.Engine[Browser.Engine.name + Browser.Engine.version] = true;