看到一个刁钻问题: (a==1 && a==2 && a==3) 可以为true吗?

一看到这个刁钻问题,我竟然有点懵: (a==1 && a==2 && a==3) 是否可以为true?既然能提出这个问题,说明那肯定是可以为true的,那么怎么样实现呢?

在js里面,比较运算符对于不同类型的值会做类型转换,所以这里应该有可以操作的可能。我们先看一下非严格相等在js里面的类型转换关系:

被比较值 B
Undefined Null Number String Boolean Object
被比较值 A Undefined true true false false false IsFalsy(B)
Null true true false false false IsFalsy(B)
Number false false A === B A === ToNumber(B) A=== ToNumber(B) A== ToPrimitive(B)
String false false ToNumber(A) === B A ===

也谈JavaScript代码性能优化

差不多两年前写了个选择器whiz,除在DOM查找方面做了许多优化工作之外,还在代码优化上做了很多工作,一直没有分享。抽空总结一下,基本上在jQuery、Mootools和YUI的源码里面都可以看到这些写法。有些是已经在网上分享很多遍了,众所周知的,也有一些可能写了多年的JavaScript的开发人员也不一定想得到的。如果有说得不正确的地方,还请大家指出。还有特别说明的是,其中某些写法不是很推荐,虽然代码简洁了,但是有可能造成阅读困难。

1.尽量使用源生方法(Native Method)

js是解释性语言,相比编译性语言执行速度要慢。如果浏览器已经实现了该方法,就不要再用js再去实现一遍了。另外,绝大部分情况下,浏览器已经实现的方法已经在算法方面做了很多优化,再重复实现一遍只是浪费时间和精力还有带宽。当然,如果你只是为了练习算法,那另当别论。

2.尽可能减少循环次数

代码的瓶颈大多在循环,少一层循环,就能数倍地提高性能。如果要对一个数组的每个元素进行多次操作,尽可能使用一次循环,多次操作,而不是多次循环,每次循环执行一次操作。尤其是在进行多个正则匹配的时候,尽可能合并正则表达式,在一次遍历中尽可能找到相应的匹配。…

解决ubuntu下ibus没有输入窗口的问题

在用ubuntu 10的时候为了装google拼音输入法,把ibus给卸载了,装来scim,而且一直用google拼音也用得挺好。直到后来升级到了ubuntu 11,发现google拼音变得极不稳定,经常在选第二个词的时候挂掉,然后就再也没办法输入中文,只能重新启动scim,挺烦人的。于是考虑再次回到默认的ibus输入法,于是卸载scim,重新装上ibus,结果更悲剧的事情发生了,ibus一直提示没有输入窗口,现象就是下面的这张图。

ibus没有输入窗口

Google了N下发现有很多人和我碰到一样的问题,但似乎都没有解决办法。折腾了几天之后,终于找到一个办法,就是修改gtk配置文件。首先进入这个目录:/usr/lib/gtk-2.0/2.10.0(gtk版本可能略有区别),里面有个gtk.immodules文件,用vim或者gedit等文本编辑器打开它,找到这两行:

"/usr/lib/gtk-2.0/2.10.0/immodules/im-xim.so"

JavaScript类型转换太变态,慎用

JavaScript的是弱类型的,但是在很多操作中,它会自动进行相应的类型转换,可能很多人都知道下面这样的变态类型转换:

// 下面这个等于80.8
alert('88.8' - 8);
// 下面这个等于'88.88'
alert('88.8' + 8)

上面的这个很好理解,JavaScript在做减法运算时,会自动把字符串转换为Number,在做加法时,只要是和字符串相加,那么肯定会把数字转换为字符串。但是,但是很少有人知道下面这样变态的类型转换:

var x = '0E8888';
alert(x == 0);        // 这个是true
if (x >= 0) {
    alert('x >= 0');  // 这个也是true
}
if (x < 0) {
    alert('x < 0');
}

如果说我们这样理解:在做比较运算时,会自动把字符串转换为数字,所以’0E8888’被转换为0,所以上面的结果没有任何问题。那么下面的就没办法解释了:…

让Javascript的智能提示和C#一样强悍

VS 2008的新增的一个巨大特性就是增加了Javascript的调试功能(见:VS2008中JavaScript的智能提示和调试很强大)。没有细说有多强大,其实这种提示和调试可以强大到和VS中的C#一样,javascript的 Intellisense甚至可以跨文件,自动识别类型。不过你的注释得写成这样:

function Element(element, properties){
///

/// Element类,创建一个HTML Element实例
///

///Element的标签名或者一个当前的DOM元素///可选:Element的属性集合,如{‘href’: ‘http://pplive.com‘, ‘class’: ‘myClass’}///
}

这样,当你new一个Element的时候,会出现关于Element这个构造函数作用的提示,键入第一个括号以后,会出现参数提示,键入最后一个括号,再键入一个点,就会出现这个类的所有属性和方法提示。可以跨文件提示,实在是很好用~…

[转]技巧:让你的Firefox极速狂飙

文章转自:http://www.firefox.hk/1047.html

Firefox超速绝密方法:

第一步,在URL栏输入“about:config”, 将打开一个参数的命令行清单,这就是我们以下进行编辑的第一步

第二步,在下面的清单中找到“network.http.pipelining” 然后双击network.http.pipelining将其值改成“true” 下面我们要做的就是找到“network.http.pipelining.maxrequests”并把它的值改的高一些,如果你改成30,意思就是要求它每次发送30个请求。

第三步就是在Firefox任何一个地方点右键,选择“新建”—“整数”在弹出的对话框中输入“nglayout.initialpaint.delay”并将其值改为“0”,表示当浏览器收到网站回复的信息后能够快速的反应。

完全关闭FireFox后退出,再重新打开FireFox,你将会有不一样的速度体验,会有2—3倍的速度提升,有兴趣的朋友可以实验一下。…

用CSS轻松实现圆角

一直以为用CSS做一个圆角的链接会很麻烦,在蓝色理想上看到一些漂亮的圆角链接,背景图片还可以切换,于是下载下来看了一下,发现原来实现起来也很简单。下面这个是效果图:

具体实现方法如下:
先制作好这样两张背景图片,一张为左边的圆角,比较窄,另一张为右边的圆角,比较宽(为了使较长的链接仍能正常显示),如下图:
(left.gif)
(right.gif)

CSS代码为(注意其中的背景图片的定位,这个是实现效果的关键所在):

body {
margin:0;
padding:0;
font-family:Tahoma;
font-size:12px;
font-weight:bold;
background-color:#fff;
text-align:center;
}
#tabs{
margin-left:auto;
margin-right:auto;
margin-top:40px;
width:100%;
background:#fff;

CSS到底有多强,请看这个

老外经常喜欢做一些令人目瞪口呆的事情,这不又出现了两个纯用CSS实现的房子,我看到的第一眼就目瞪口呆了,然后开始找他有没有用图片。没有找到,只好无限佩服了!

为方便读者,已经把原网页复制了一份:
CSS House 1:http://fdream.net/blog/upfile/csshouse1.html
CSS House 2:http://www.afdream.com/blog/upfile/csshouse2.html

原页面地址:
CSS House 1:http://www.designdetector.com/tips/3DBorderDemo2.html
CSS House 2:http://www.designdetector.com/demos/css-house-2.html

BTW:还是最大限度的照顾低分辨率用户,当客户端的分辨率为800×600时,不使用绿色夏天作为默认样式,而自动使用样式蓝色清新

用CSS实现半透明背景色

看看效果先:

上图中的透明度为50%。这个实现起来其实也没什么,很Easy的事情^_^

在CSS中有一个Alpha滤镜,这个滤镜可以设置目标元素的透明度。还可以通过指定坐标,从而实现各种不通范围的透明度。具体语法如下:

{filter:alpha(opacity=opacity,finishopacity=finishopacity,style=style,startx=startx,starty=starty,finishx=finishx,finishy=finishy)}

具体参数含义如下:
opacity 透明度。默认的范围是从0 到 100,他们其实是百分比的形式。也就是说,0代表完全透明,100代表完全不透明。
finishopacity 是一个可选参数,如果想要设置渐变的透明效果,就可以使用他们来指定结束时的透明度。范围也是0 到 100。
style 指定透明区域的形状特征:0 代表统一形状,1 代表线形,2…

ROSE,可恶的ROSE!

最近东校区貌似Rose泛滥,无论走到哪里都听到有人说rose,就晚上去超市买东西还听见好几个人议论。第一次感觉这个病毒有这么强悍,居然有这么多人讨论。今天班里的一个女生的电脑挂了,连系统也进不了,也是这个该死的rose在作怪!

中了Rose后的主要症状:

1、在系统中占用大量cpu资源。
2、在每个分区下建立rose.exeautorun.inf2个文件,双击该盘符时显示自动运行,但无法打开该分区。
3、大部分通过U盘、移动硬盘等存储设备传播。对网络危害还在发现过程当中。
4、引起部分操作系统崩溃,表现在开机自检后直接并反复重启,无法进入系统。

手动清除Rose.exe病毒的解决办法:

1.打开我的电脑,点”工具”–”文件夹选项”–”查看”,在”高级选项”里,把”隐藏受保护的操作系统文件(推荐)”一项前面的勾号去掉,并将”隐藏文件和文件夹”下属栏中选中”显示所有文件和文件夹”.…