无厘头后是祝福

作者:yaya | 时间:2010年1月9日 | 分类 学海无涯 | 标签 无题 | 1回复

在颜色渐变的时候,肯定首先要得到颜色,不然怎么个渐变呢。所以,首先就要得到颜色再说。而要是得到的是rgb...或者#...这样格式还不错。但是要是得到一个"red"或者"black"怎么办呢。哈希匹配自然是一种办法。挨个写上对应的值,就搞定啦(好像很方便,因为可选颜色本来就不多)。好了,以下是另外一种实现。改写自Dean Edwards的代码。很直观,也很简洁,将任何颜色格式转变为hex格式。

用Notepad++选择Plastic Code Wrap主题,看着很帅~

 

接下来无厘头一下。RC版即将挂掉。本本知道系统要挂了,所以提前让自己先挂了。装成了中文版的,刚一看不习惯。guoguo说还是去下个英文语言包得了。最开始RC就英文版,后来也一直没有换。到现在,不得不换了。然后就下载更新。重新启动。然后见下图。雷啊。1234个更新。等了好久没动静,强制关机了。无厘头。

 

今天弟弟要过来,我要去接去机场接他。好久没见面了。而老傻(老二)和罗小丸子今天要考研。强娃儿,凯娃儿,潘哥,树子,小红帽等等也要考研。祝福他们都能考出好成绩!加油加油!

写完睡觉了。

看array

作者:yaya | 时间:2009年12月30日 | 分类 学海无涯 | 标签 array | 0回复

还久没写“学海无涯”类的了,写写。

在javascript里面,array是很有意思的东东。它代表数组,可不单单是数组。

数组array可以简单的用作array[0] array[1],同时,也可以有像操作对象object={ }一样的方便。

先来看看方括号到底做了什么。

我们可以这样来理解假设执行方法:

比如写上

Object.prototype.toString = function(){return 99;}
a[{}]=1;
alert(a.length);  //100

可以看出array[ v ],这里的一对方括号将调用v 的toString()方法。更进一步,看

String.prototype.toString =function(){return 999;};
var z = new String("800");
a[z]=2;
alert(a.length);//1000

以及
String.prototype.toString =function(){return 999;};
var z = “800”
a[z]=2;
alert(a.length);//801

以及其他测试,可以看出,其中的几步(非实际顺序)将判断参数类型,如果为number则直接赋值,而若不是,则用instanceof 方法判断类型,如果typeof为string而instanceof不是String,则用正则来判断是否为十进制的非负整数。(这里为什么不用Number()去转换,然后再判断是否为NaN更好,这样就可以自动转换像"0x123"这样的数了)。如果是,则赋值,若不是,则调用其toString(10)的方法转换再重复这个判断,然后再执行到这一步则是添加属性到对象了。

所以,我们可以用array["abc"]=1这样的形式来写。而array本来也就是个object,只是它有数组的许多属性,如果你想把一个对象写成自己的myarray写是可以的,当然是在不考虑效率的情况下。这样一来,array就和object用法可以一样了,唯一区别在于语法上,array不能像object一样写成object={a:1,b:2},而是要分开写成array.a=1 array.b=2 或者 array[a]=1,array["b"]=2(object 也可以这么写)。再看for in操作,array和object是完全一样的,不用多说了。而array.length的for操作,相当于就是取得array所有属性里面为非负整数的属性。而delete操作在array和object里也是一样的。

而操作时间上,array和object也是基本相同的。

 

firefox重复执行js

作者:yaya | 时间:2009年12月10日 | 分类 学海无涯 | 标签 firefox javascript | 3回复

当不写meta标签的时候(乱写个编码名和不写情况一样),编码不为unicode utf-8 bom时候,出现问题,将重复执行js,所以会弹出两次I'm a bug

这是中文注释引起的。去掉中文注释正常。但是,当把meta写好后,且与文件编码一致时候是没问题的。

HttpWebRequest 417错误不可怕

作者:yaya | 时间:2009年12月2日 | 分类 学海无涯 | 标签 417错误 HttpWebRequest | 1回复

417错误不可怕!可怕的是guoguo那家伙非要想去post一个get的东东!!!弄了半天才发现~~简直晕了!

417错误:服务器不满足请求Expect头字段指定的期望值,如果是*****,可能是下
一级服务器不能满足请求

如果要post数据的话加上System.Net.ServicePointManager.Expect100Continue = false就可以了。

这是因为HttpWebRequest会先去查询url是否存在而不会去post数据,证实以后再post数据。而一些apache不能接受,认为出错。而这都是expect头字段指定引起的。就是说HttpWebRequest默认设置Expect:100-continue(http1.1才有的属性)。只有设置为false就可以了。

鄙视guoguo中!

 

一些好玩的片段

作者:yaya | 时间:2009年11月30日 | 分类 学海无涯 | 标签 作用域 var | 2回复

今天写个小玩意,涉及到了以下的一些东西。猜猜下面各个程序片段运行弹出a的对话框是多少呢?

代码1
  1. var a;
  2. for (var i=0;i<2;i++)
  3. {  
  4.    if (i==0)
  5.    {  
  6.      a=100;
  7.    }
  8.    else
  9.    {      
  10.      alert(a);
  11.    }
  12. }
代码2
  1. for (var i=0;i<2;i++)
  2. {  
  3.    if (i==0)
  4.    {  
  5.      a=100;
  6.    }
  7.    else
  8.    {    
  9.      alert(a);
  10.      var a = i;
  11.    }
  12. }
代码3
  1. for (var i=0;i<2;i++)
  2. {  
  3.    if (i==0)
  4.    {  
  5.      a=100;
  6.    }
  7.    else
  8.    {    
  9.      alert(a);
  10.    }
  11.    var a = i;
  12. }
代码4
  1. for (var i=0;i<2;i++)
  2. {  
  3.    if (i==0)
  4.    {  
  5.      a=100;
  6.    }
  7.    else
  8.    {  
  9.      var a = i;    
  10.      alert(a);
  11.    }
  12. }
代码5
  1. for (var i=0;i<2;i++)
  2. {  
  3.    var a;
  4.    if (i==0)
  5.    {  
  6.      a=100;
  7.    }
  8.    else
  9.    {      
  10.      alert(a);
  11.    }
  12. }

 

其实只要知道了以下即可:

1.由于只有函数定义才会产生新的作用域(当然程序本来就会产生),而块级元素是不会产生的,所以for block自然也不会产生新的作用域。所以就以上代码而言,在for循环里面写var a亦等于写在for循环外,都相当于被定义为全局变量,即添加为global对象成员,对于浏览器宿主而言,就是window对象。

2.变量的声明查找会从其作用域开始进行查找,若没有找到就到上级作用域查找。就是说会从当前的函数块开始查找,找不到就上上级的函数块,找到了最上层还找不到就会报错。这里需要说明的是,如果某个作用域的环境的所有者有prototype属性,则会沿着prototype链去查找下去。

3.变量创建时候就被设置为了undefined,所以未赋值时候为undefined,而未申明则会报错。

4.而至于var的位置可变性,则是javascript进行预编译的结果。也就是说会先分配给内存空间给它,但是呢,并没有赋值,这个时候变量已经创建了。而赋值的操作则是在解释执行的时候了。

通过以上的几点,我们可以很容易得得出,以上几个程序片段的运行结果分别为:100,100,0,1,100

OK。写完收工。

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. ...
  8. 11