不得不感叹时代的进步,一条4G内存一百多块钱,五百出头就能轻松达成16G内存。如果你还觉得自己的电脑内存不足而不去升级,那真是有点太过“节省”了。生活中有很多需要节省的地方,也有很多需要迫切的需求必须尽快满足。比如饥饿、寒冷、睡眠等这些迫切的需要就急迫需要得到满足,一旦哪方面失衡人体就会受到侵害。而如果你的电脑已经有4G内存,并且觉得够用了,那就真的没有必要花更多的钱去追求那些没有必要的“虚荣”。没错,我们应该用虚荣去形容它。但是假如你机器还可怜巴巴的512M或1G内存,那真该干脆把那条内存拔掉,直接买一条4G内存换上。仔细想想吧,那些等待的时间会浪费你多少效率?而仅仅花掉一百多块钱你就不用再因为机器内存的不足而久经等待,这一切都是划得来的。

比如现在,我写博客的虚拟主机已经够我的使用了,我就没有必要贪图虚荣而去买linode VPS,你说对吧?但假如你的博客PR已经过3,也逐渐能够取得一点盈利,虚拟主机又逐渐达到你的瓶颈,那你真该考虑考虑是否提高虚拟主机的预算而去选择一个更好的环境了。又比如,你在学习一门语言,还没有掌握简单的东西,就开始去研究高深的知识,这也不符合“省”的原则。因为最终你可能会浪费掉很多时间,而不得不重头回到原来的起点。

想想吧,尤其我们马上要做的事情,又恰巧是必须投入大量的时间、精力、金钱的事情,一定要从省的原则去考虑。凡事够用就好,这样才能一步步走向远方。共勉吧。

正则表达式不完全笔记

分享一句话:“最终你相信什么就能成为什么。因为世界上最可怕的二个词,一个叫执着,一个叫认真,认真的人改变自己,执着的人改变命运。”
这些都是我挨句看,把重要的示例和定义摘录下来。如果你哪句不明白可以询问,也可以提出新的问题一同交流。

/^s*$/ 匹配空行

/d{2}-d{5}/ 验证由两位数字、一个连字符再加 5 位数字组成的 ID 号。

/<s*(S+)(s[^>]*)?>[sS]*<s*/1s*>/ 匹配 HTML 标记。

[u4e00-u9fa5] 匹配中文字符

[^x00-xff] 匹配双字节字符(包括汉字在内)

ns*r 匹配空白行,可以用来删除空白行

^s*|s*$ 匹配首尾空白字符,可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式

w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)* 匹配Email地址

[a-zA-z]+://[^s]* 匹配网址URL

^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)

d{3}-d{8}|d{4}-d{7} 匹配国内电话号码

[1-9][0-9]{4,} 匹配腾讯QQ号

[1-9]d{5}(?!d) 匹配中国邮政编码

d{15}|d{18} 中国的身份证为15位或18位

d+.d+.d+.d+ 匹配ip地址

^[1-9]d*$    //匹配正整数

^-[1-9]d*$   //匹配负整数

^-?[1-9]d*$   //匹配整数

^[1-9]d*|0$  //匹配非负整数(正整数 + 0)

^-[1-9]d*|0$   //匹配非正整数(负整数 + 0)

^[1-9]d*.d*|0.d*[1-9]d*$   //匹配正浮点数

^-([1-9]d*.d*|0.d*[1-9]d*)$  //匹配负浮点数

^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$  //匹配浮点数

^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$   //匹配非负浮点数(正浮点数 + 0)

^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$  //匹配非正浮点数(负浮点数 + 0)

^[A-Za-z]+$  //匹配由26个英文字母组成的字符串

^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串

^[a-z]+$  //匹配由26个英文字母的小写组成的字符串

^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串

^w+$  //匹配由数字、26个英文字母或者下划线组成的字符串

“|” 表示或

限定前面这个字符出现的个数,不加数量限定则表示出现一次仅出现一次

“+” 表示至少出现一次(1次、或多次)

“?” 表示最多出现一次(0次、或1次)

“*” 表示可以不出现,也可以出现一次或者多次。(0次、或1次、或多次)

“()”用来定义操作符的范围和优先度。

“” 转义

“^” 匹配输入字符串的开始位置

“$” 匹配输入字符串的结束位置。

“{n}” n是一个非负整数。匹配确定的n次。

“{n,}” n是一个非负整数。至少匹配n次

“{n,m}” n和m均为非负整数。其中n<=m。至少匹配n次且最多匹配m次。

“?” 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面,匹配模式是非贪婪的。

非贪婪模式尽可能少的匹配所搜索的字符串。而默认的贪婪模式则尽可能多的匹配所搜索的字符串。

“.” 匹配除”n”之外的任何单个字符。要匹配包括”n”在内的任何字符,请使用像”(.|n)”的模式

“(pattern)” 匹配pattern并获取这一匹配。要匹配圆括号字符,请使用”(“或”)”。

“(?:pattern)” 匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。

“(?=pattern)” 正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。

“(?!pattern)” 正向否定预查

“(?<=pattern)” 反向肯定预查

“(?<!pattern)” 反向否定预查

“x|y” 匹配x或y。

“[xyz]” 字符集合。匹配所包含的任意一个字符

“[^xyz]” 负值字符集合。匹配未包含的任意字符。

“[a-z]” 字符范围。匹配指定范围内的任意字符。

“[^a-z]” 负值字符范围。匹配任何不在指定范围内的任意字符。

“b” 匹配一个单词边界,也就是指单词和空格间的位置。例如,“erb”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。

“B” 匹配非单词边界。

“cx” 匹配由x指明的控制字符。x的值必须是A-Z或a-z之一。否则,将c视为一个原义的”c”字符。例如,cM匹配一个Control+M或回车符。

“d” 匹配一个数字字符

“D” 匹配一个非数字字符

“f” 匹配一个换页符。等价于x0c和cL。

“n” 匹配一个换行符。等价于x0a和cJ。

“r” 匹配一个回车符。等价于x0d和cM。

“s” 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[fnrtv]。

“S” 匹配任何非空白字符。等价于[^fnrtv]。

“t” 匹配一个制表符。等价于x09和cI。

“v” 匹配一个垂直制表符。等价于x0b和cK。

“w” 匹配包括下划线的任何单词字符。等价于[A-Za-z0-9_]

“W” 匹配任何非单词字符。等价于[^A-Za-z0-9_]

“xn” 匹配n,其中n为十六进制转义值。十六进制转义值必须为确定的另个数字长。正则表达式中可以使用ASCII编码。

“num” 匹配num,其中num是一个正整数。”(.)1″匹配两个连续的相同字符。

“n” 标识一个八进制转义值或一个向后引用。如果n之前至少n个获取的子表达式,则n为向后引用。否则,如果n为八进制数字(0-7),则n为一个八进制转义值。

“nm” 标识一个八进制转义值或一个向后引用。如果nm之前至少有nm个获得子表达式,则nm为向后引用。如果nm之前至少有n个获取,则n为一个后跟文字m的向后引用。如果前面的条件都不满足,若n和m均为八进制数字(0-7),则nm将匹配八进制转义值nm。

“nml” 如果n为八进制数字(0-3),且m和l均为八进制数字(0-7),则匹配八进制转义值nml。

“un” 匹配n,其中n是一个用四个十六进制数字表示的Unicode字符。例如,u00A9匹配版权符号(©)。

修改Dreamweaver 历史记录条数

CODER众经常遇到的一个问题是,修改了很多条代码以后,发现还不如之前写的好。此时唯一能做的就是Ctrl+Z,让无尽的代码回到很多条之前模样。可是如果历史记录的条数是固定的,太过久远的历史条目不一定能够被记录到。所以在我们编码之前要做的一个必要的设置,就是把历史记录的条目改到适合自己,Ctrl+U调出Dreamweaver的设置页面,修改最大历史记录条目一项,设置为自己合理的条数即可。

学好DOM core的网站推荐

第一个还是推荐w3c官方的DOM Level 2 Core标准,所有详细的DOM Level2信息都在这个标准内。目前大家使用、学习最多的还是Level 2,随着新浏览器的推行,DOM Level3的支持也在慢慢跟上。如果你想详细的了解Level 2的所有详细细节,请看第一个链接。
http://www.w3.org/TR/DOM-Level-2-Core/core.html

第二个推荐的网站,就是本篇博客配图的网站,里面包含所有DOM核心针对各个浏览器支持情况的统计。想必大家非常想了解详细的细节吧,那么请毫不犹豫的打开第二个链接。
http://www.quirksmode.org/dom/w3c_core.html

JavaScript基础部分知识点整理(2)

ECMAScript中的对象其实就是一组数据和功能的集合。

var o = new Object();

Object的每个实例都具有下列属性和方法

constructor——保存着用于创建当前对象的函数。

hasOwnProperty(propertyName)——用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。propertyName必须是字符串。

isPrototypeof(object)——用于检查传入的对象是否是另一个对象的原型。

propertyIsEnumerable(propertyName)——用于检查给定的属性是否能够使用for-in语句来枚举。

toString()——返回对象的字符串表示

valueOf()——返回对象的字符串、数值或布尔值表示。

只能操作一个值的操作符叫一元操作符、

++age

age = age +1;

–age

age = age -1;

位操作符用在最基本的层次上,即按内存中表示数值的位来操作数值。

对于有符号的整数,32位中的前31位用于表示整数的值,第32位用于表示数值的符号,0表示整数,1表示负数。

var num = -18;

alert(num.toString(2));//”-10010″

转换过程理解了二进制补码,并将其以更合乎逻辑的形式展示了出来。

对数值应用位操作符时:64位的数值被转换成32位数值,然后执行位操作,最后再将32位的结果转换回64位数值。

按位非(NOT),由一个波浪线表示,执行按位非的结果就是返回数值的反码。

var num1 = 25;//11001

var num2 = ~num1;//11111…11100110

alert(num2);//-26

按位非的本质:操作数的负值减一。

按位与(AND):按位与操作只在两个数值的对应位都是1时菜返回1,任何一位是0,结果都是0。

var result = 25 & 3;

alert(result);//1

按位或(OR):有一个是1结果就是1.

var result = 25 | 3;

alert(result);//27

按位异或(XOR):相同是0,不同是1。

var result = 25 ^ 3;

alert(result);//26

左移操作符(<<),这个操作符会将数值的所有位向左移动指定的位数。

var oldValue = 2;

var newValue = oldValue << 5;

alert(newValue);//64

左移或右移不会影响操作数的符号位。左移操作会以0来填充这些空位,右移操作会以符号位的值来填充所有的空位。

无符号右移(>>>)

对于正数来说,无符号右移的结果与有符号右移的结果相同。

无符号右移操作符会把负数的二进制码当成正数的二进制码。而且,由于负数以其绝对值的二进制补码形式表示,

因此就会导致无符号右移的结果非常之大。

(负数是正数的补码加上符号位是1,正数符号位是0,前面的所有位也是0,比如1,就是0000…00001只有最后一位是1,-1则是+1的补码)

在一门编程语言中,布尔操作符的重要性堪比相当操作符。

如果没有测试两个值的关系的能力,那么诸如if…else和循环之类的语句不会有用武之地了。

布尔操作符一共有3个:非(NOT)、与(AND)和或(OR)。

逻辑非,用一个叹号(!)表示。

!对象,返回false

!空字符串,返回true

!非空字符串,返回false

!0,返回true

!任意非0数值(包括Infinity)返回false

!null/!NaN/!undefined返回true

!!和使用Boolean()函数相同。

逻辑与&&

在有一个操作数不是布尔值的情况下,逻辑与操作就不一定返回布尔值;此时,它遵循下列规则:

如果第一个操作数是对象,则返回第二个操作数;

如果第二个操作数是对象,则只有在第一个操作数的求职结果为true的情况下才会返回该对象;

如果两个操作数都是对象,则返回第二个操作数;

如果有一个操作数是null,则返回null;

如果有一个操作数是NaN,则返回NaN;

如果有一个操作数是undefined,则返回undefined

逻辑与操作属于短路操作,即如果第一个操作数能够决定结果,那么就不会再对第二个操作书求值。

对于逻辑与操作而言,如果第一个操作数是false,则无论第二个操作数是什么值,结果都不再可能是true了。

不能再逻辑与操作中使用未定义的值。

在使用逻辑与操作符时要始终铭记它是一个短路操作符。

逻辑或(||)

如果有一个操作数不是布尔值,逻辑或也不一定返回布尔值;此时,它遵循下列规则:

如果第一个操作数是对象,则返回第一个操作数;

如果第一个操作数的求值结果为false,则返回第二个操作数;

如果两个操作数都是对象,则返回第二个操作数;

如果两个操作数都是null/NaN/undefined,则返回null/NaN/undefined

逻辑或操作符也是短路操作符。也就是说,如果第一个操作数的求值结果为true,就不会对第二个操作数求值了。

var myObject = preferredObject || backupObject;

乘性操作符(乘法、除法和求模),操作数未非数值的情况下会执行自动的类型转换,使用Number()转型函数将其转换为数值。

乘法(*)

如果有一个操作符是NaN,则结果是NaN;

如果是Infinity与0相乘,则结果是NaN;

除法(/)

如果一个操作数是NaN,则结果是NaN;

如果是Infinity被Infinity除,则结果是NaN;

如果是Infinity被任意数值除,则结果是Infinity;

如果是零被零除,则结果是NaN;

如果是非零的有限数被零除,则结果是Infinity或-Infinity;

求模(余数)操作符由一个百分号(%)表示

如果操作符都是数值,执行常规的除法计算,返回除得的余数;

如果被除数是无穷大值而除数是有限大的数值,则结果是NaN;

如果被除数是有限大的数值而除数是零,则结果是NaN;

如果是Infinity被Infinity除,则结果是NaN;

如果被除数是有限大的数值而除数是无穷大的数值,则结果是被除数。

如果被除数是零,则结果是零;

加法

如果有一个操作数是NaN,则结果是NaN;

如果是Infinity加Infinity,则结果是NaN;

如果是+0加-0,则结果是+0;

如果两个操作数都是字符串,则将第二个操作数与第一个操作数拼接起来;

如果只有一个操作数是字符串,则将另一个操作数转换为字符串,然后再将两个字符串拼接起来。

如果有一个操作数是对象、数值或布尔值,则直接调用它们的toString()方法去的相应的字符串值,再应用前面关于字符串的规则。

对于undefined和null,则分别调用String()函数并去的字符串”undefined”和”null”。

减法(-)

如果有一个操作数是NaN,则结果是NaN;

如果是Infinity减Infinity,则结果是NaN;

如果是-Infinity减-Infinity,则结果是NaN;

如果是Infinity减-Infinity,则结果是Infinity;

如果是-Infinity减Infinity,则结果是-Infinity;

如果是+0减+0,则结果是+0;

如果是+0减-0,则结果是-0;

如果是-0减-0,则结果是+0;

对象先用valueOf()方法,如果没有valueOf()方法,则调用toString()方法,并将得到的字符串转换为数值。

关系操作符

小于(<)、大于(>)、小于等于(<=)和大于等于(>=),都返回一个布尔值。

当关系操作符的操作数使用了非数值时,也要进行数据转换或完成某些奇怪的操作。

如果两个操作数都是数值,则执行数值比较;

如果两个操作数都是字符串,则比较两个字符串对应的字符编码值;

如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较;

如果一个操作数是对象,则调用valueOf()方法,如果没有valueOf()方法,则调用toString()方法。

如果一个操作数是布尔值,则先将其转换为数值,然后再执行比较。

var result = “Brick”.toLowerCase() < “alphabet”.toLowerCase();//false

“23″ < “3″ //true

“23″ < 3 //false

“a” < 3 //false,”a”转换为NaN

NaN < 3 //false

NaN > 3 //false

相等(==)和不相等(!=),这两个操作符都会强制转型

如果有一个数是布尔值,则在比较之前先将其转为数值;

如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值;

如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的原始值按照前面的规则进行比较;

null和undefined是相等的;

要比较相等性之前,不能将null和undefined转换成其他任何值;

如果有一个操作数是NaN,则相等操作符返回false,而不相等操作符返回true。

重要提示:即使两个操作数都是NaN,相等操作符也返回false;按照规则,NaN不等于NaN。

如果两个操作数都是对象,则比较他们是不是同一个对象。

全等(===)和不全等(!==)

*由于相等和不相等操作符存在类型转换问题,而为了保持代码中数据类型的完整性,我们推荐使用全等和不全等操作符。

条件操作符

variable = boolean_expression ? true_value : false_value;

var max = (num1 > num2) ? num1 : num2;

赋值操作符

var num =10;

num += 10;//num = num + 10 ;

乘/赋值*=

除/赋值/=

模/赋值%=

加/赋值+=

减/赋值-=

左移/赋值<<=

有符号右移/赋值>>=

无符号右移/赋值>>>=

逗号操作符

var num1=1, num2=2, num3=3;

var num = (5, 1, 4, 8, 0);//num 的值为0

流控制语句

if (codition) statement1 else statement2

ECMAScript会自动调用Boolean()转换函数将这个表达式的结果转换为一个布尔值。

业界普遍推崇的最佳实践是始终使用代码块,即使要执行的只有一行代码。

do-while语句是一种后测试循环语句,即只有在循环体中的代码执行之后,才会测试出口条件。

换句话说,在对表达式求值之前,循环体内的代码至少会被执行一次。

do {

statement

} while (expression);

var i = 0;

do {

i += 2;

}while(i<10);

像do-while这种后测试循环语句最常用于循环体中的代码至少要被执行一次的情形。

while语句属于前测试循环语句。

while(expression) statement

for语句也是一种前测试循环语句,但它具有在执行循环之前初始化变量和定义循环后要执行的代码的能力

for (initialization; expression;post-loop-expression) statement

for-in语句是一种精准的迭代语句,可以用来枚举对象的属性。

for (property in expression) statement

for ( var proName in window){

document.write(propName);

document.write(“<br />”);

}

label语句,使用label语句可以在代码中添加标签,以便将来使用。

label: statement

start: for(var i=0;i<count;i++){alert(i)}

这个例子定义的start标签可以在将来由break或continue语句引用。加标签的语句一般都要与for语句等循环语句配合使用。

break和continue语句用于在循环中精确的控制代码的执行。其中,break语句会立即退出循环,强制继续执行循环后面的语句。

而continue语句虽然也是立即退出循环,但退出循环后会从循环的顶部继续执行。

with语句的作用是将代码的作用域设置到一个特定的对象中。

with (expression) statement

switch(expression){

case value://合并两种情形

case value: statement

break;

case value: statement

break;

default: statement

}

函数

function functionName(arg0, arg1, …, argN){

statements

}

function howManyArgs(){

alert(arguments.length);

}

ECMAScript中的参数在内部是用一个数组来表示的。函数接收到的始终都是这个数组,而不关心数组中包含哪些参数(如果有参数的话)。

可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。

 

小结部分都很重要

事实上,未指定返回值的函数返回的是一个特殊的undefined值。

 

==================

 

基本类型值指的是哪些保存在栈内存中的简单数据段,即这种值完全保存在内存中的一个位置。

引用类型值则是指哪些保存在堆内存中的对象,意思是变量中保存的实际上只是一个指针,这个指针指向内存中的另一个位置,该位置保存对象。

 

var person = new Object();

person.name = “Nicholas”;

alert(person.name);//”Nicholas”

 

变量有按值和按引用两种方式,而参数只能按值传递。

instanceof操作符

result = variable instanceof constructor

在检测一个引用类型值和Object构造函数时,instanceof操作符始终返回true;

检测基本类型的值,则该操作符始终会返回false,因为基本类型不是对象。

执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为。

每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。

当执行流进入一个函数时,函数的环境就会被推入一个环境栈中。

而再函数执行之后,栈将其环境弹出,把控制权返回给之前的执行环境。

函数参数也被当做变量来对待,因此其访问规则与执行环境中的其他变量相同。

 

延长作用域链

 

第四章 变量、作用域和内存问题 的小节

 

==============

 

引用类型是一种数据结构,用于将数据和功能组织在一起。

引用类型有时候也被称为对象定义,因为他们描述的是一类对象所具有的属性和方法。

 

var person = new Object();

person.name = “Nicholas”;

person.age = 29;

对象字面量表示法

var person = {

name: “Nicholas”,

age: 29

};

 

ECMAScript中的数组与其他多数语言中的数组有着相当大的区别。

ECMAScript数组的每一项都可以保存任何类型的数据。

var colors = new Array(3);

var names = Array(“a”);

var colors = ["red", "blue", "green"];

var names = [];

与对象一样,在使用数组字面量表示法时,也不会调用Array构造函数(Firefox除外)。

var colors = ["red", "blue", "green"];

colors.lenght = 2;

alert(colors[2]);//undefined

colors[colors.length] = “black”;

所有对象都具有toLocaleString()、toString()和valueOf()方法,其中,调用数组的toString()和valueOf()方法会返回相同的值,

即由数组中的每个值的字符串形式拼接而成的一个以逗号分割的字符串。

toLocaleString()方法经常也返回与toString()和walueOf()方法相同的值,但也不总是如此。

var colors = ["red", "green", "blue"];

alert(colors.join(“,”));//red,green,blue

alert(colors.join(“||”));//red||green||blue

栈是一种LIFO(last-in-first-out,先进后出)的数据结构,也就是最新添加的想最早被移除。

push()方法可以接受任意数量的参数,把它们逐个添加到数组末尾,并发挥修改后的数组的长度。

pop()方法则从数组的末尾移除最后一项,减少数组的length值

JavaScript基础部分知识点整理

JavaScript

核心ECMAScript + 文档对象模型(DOM) + 浏览器对象模型(BOM)

 

<script type=”text/javascript”>

function sayHi(){

alert(“</scr” + “ipt>”);//不要在代码中的任何地方出现</script>字符串。

}

</script>

<script type=”" src=”"></scirpt>//带有src元素的<script>元素不应该在标签之间再包含额外的JS代码

在文档的<head>元素中包含所有JS文件,意味着必须等到全部的JavaScript代码都被下载、解析和执行完成以后,才开始呈现页面的内容。

JS引用放在<body>元素中,放在页面的内容后面,可以提高加载速度

XHTML把<解析为错误问题的解决办法:

<script type=”text/javascript”>

//<![CDATA[

function compare(a, b){

if(a<b){

alert("aa");

}

}

//]]>

</script>

尽量多用外部文件写JS,提高可维护性、可缓存性、可适应未来(无需使用小于号的hack)。

按照<script>元素的先后出现的顺序解析,解析完前面的才能解析后面的。

<noscript>

<p>本页面需要浏览器支持(启用)JavaScript.</p>

</noscript>

ECMAScript第3版

ECMAScript中的一切都是区分大小写的

typeof为关键词

不能把关键字、保留字、true、false和null用作标示符。

标示符:第一个字符必须是一个字母、下划线(_)或一个美元符号($);其他字符可以是字母、下划线、美元符号或数字。

ECMAScript采用驼峰大小写格式,第一个字母小写,剩下的每个有意义的单词的首字母大写。firstSecond/myCar/doSometingIportant

//单行注释

/*

* 多行注释(中间行的*可省略)

*/

每行代码加分号,可以放心的通过删除多余的空格来压缩ECMAScript代码(无分号会导致错误)。

 

ECMA-262

关键字

break/else/new/var/case/finally/return/void/catch/for/switch/while/continue/function/this/with

default/if/throw/delete/in/try/do/instanceof/typeof

保留字

abstract/enum/int/short/boolean/export/interface/static/byte/extends/long/super

char/final/native/synchronized/class/float/package/throws/const/goto/provate/transient/

debugger/implements/protected/volatile/double/import/public

变量

var message;//使用var操作符定义的变量,将成为定义该变量的作用域中的局部变量。在此之后,变量立即被销毁。

function test(){

var message = “hi”;//局部变量

}

test();

alert(message);//undefined

—-

function test(){

message = “hi”;//全局变量

}

test();

alert(message);//undefined

省略了var操作符声明变量,变量就成了全局变量。只要调用一次该作用域,这个变量就有了意义,可以在函数外部的任何地方被访问到。

 

ECMAScript中有5种简单数据类型(也称基本数据类型):Undefined、Null、Boolean、Number和String,

还有一种复杂数据类型——Object,Object本质上是由一组无序的名值对组成的。

ECMAScript是松散类型的,使用”typeof操作符”可返回下列字符串:

undefined——未定义//声明变量但未初始化

boolean——布尔值

string——字符串

number——数值

object——对象或null(null类型,表示一个空对象指针)

function——函数

alert(typeof message);

alert(typeof (message));

alert(typeof 95);

typeof操作符的操作数可以是变量,也可以是数值字面量。用typeof操作符来区分函数和其他对象是有必要的。

undefined是为了正式区分空对象指针与未经初始化的变量。

对未初始化和未声明的变量执行typeof操作符都返回undefined值。

alert(key);//未声明则提示错误。

null类型,表示一个空对象指针,如果变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值

if(car != null){

//对car对象执行某些操作

}

转型函数Boolean()

Boolean true flase

String 任何非空字符串 “”(空字符串)

Number 任何非零数字值(包括无穷大) 0和NaN(not applicable不适用)

Object 任何对象 null

Undefined n/a undefined

八进制字面值的第一位必须是零,然后是八进制数字序列(0~7)

var octalNum1 = 07 //八进制的56

十六进制字面值的前两位必须是0x,后跟任何十六进制数字(0-9及A-F),字母A-F可以大写,也可以小写。

var hexNum1 = 0xA;//十六进制的10

var hexNum2 = 0x1f;//十六进制的31

虽然数值可以用八进制或十六进制表示,但在进行算术计算时,所有以八进制和十六进制表示的数值最终都将被转换成十进制数值。

浮点数会不失时机的转换为整数。

用e表示法表示的数值等于e前面的数值乘以10的指数次幂。

var floatNum = 3.125e7 //等于31250000

浮点数值的最高精度是17位小数,但在进行算术计算时其精确度远远不如整数

if(a + b == 0.3){ //永远不要做这样的测试

alert(’0.3′);

}

永远不要测试某个特定的浮点数值。

Number.MIN_VALUE能够表示的最小数值

Number.MAX_VALUE能够表示的最大数值

如果得到了一个超出JavaScript数值范围的值,会被自动转换成特殊的Infinity值,负数是-Infinity(负无穷),正数是-Infinity(正无穷)。

不管正负Infinity是不能够参与计算的数值。

isFinite()函数,这个函数在参数位于最小与最大数值之间时会返回true。

Number.NEGATIVE_INFINITY负无穷,保存着-Infinity

Number.POSITIVE_INFINITY正无穷,保存着Infinity

NaN,即非数值(Not aNumber)是一个特殊的数值,

这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。

任何数值除以0会返回NaN。任何涉及NaN的操作(NaN/10)都会返回NaN,这个特点在多步计算中有可能导致问题。

NaN与任何值都不相等,包括NaN本身。

alert(NaN == NaN) //false

isNaN()函数,任何不能转换为数值的值都会导致这个函数返回true。

isNaN()函数可以用于对象,转换时先调用对象的valueOf()方法,然后确定返回值是否可以转换为数值,

如果不能,则基于结果再调用toString()方法,这个过程也是ECMAScript中内置函数和操作符的一般执行流程。

Number()可以用于任何数据类型,布尔值返回0或1,数字值直接返回,空返回0,undefined返回NaN。如果是字符串,

字符串中包含数字,直接把数字转换为十进制;字符串中有浮点数直接转为浮点数,

如果字符串中包含十六进制的数字,直接转换为十进制,如果字符串为空(不包含任何字符),则将其转换为0,

如果字符串中包含除了上述格式之外的字符,则将其转换为NaN。

如果是对象,先valueOf()如果结果是NaN,再尝试toString()方法,再以上规则。

parseInt()只解析数字,任何字符串或.都直接忽略。和parseFloat()专门用于把字符串转换成数值,比较常用。

parseInt(“”,2/8/10/16指定进制数),建议无论什么时候都指定进制数以免产生错误,parseInt(“”,10)非常有必要。

parseFloat()第一个小数点是有效的,后面的小数点都是无效的,忽略所有前导零,只解析十进制值。

String类型用于表示由零活多个16位Unicode字符组成的字符序列,即字符串。

n 换行

t 制表

b 空格

r 回车

f 进纸

\ 斜杠

‘ 单引号

” 双引号

xnn 以十六进制代码nn表示一个字符,x41表示A

unnnn 以十六进制代码nnnn表示的一个Unicode字符,u03a3表示希腊字母Σ

任何字符串的长度都可以通过访问length属性获得

alert(text.length);

把数值转换为字符串,可以用toString()方法,null和undefined只没有这个方法,toString(空/2/8/10/16),空为十进制

var num = 10;

alert(num.toString());

String()方法,如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果,null返回”null”,undefined返回”undefined”

ECMAScript中的对象其实就是一组数据和功能的集合。

(待续)

VI快速入门命令指南

字母q:退出分页器。
字母h:显示分页器帮助。
按空格下翻一页,按字母b上翻一页。
字母d和u:分别代表向下翻动半页和向上翻动半页。
字母j和k:分别代表向上翻一行和向下翻一行。
如果行太长被截断,可以用左箭头和右箭头使窗口内容左右滚动。
输入/patern:向下寻找和pattern匹配的内容。
输入?pattern:向上寻找和pattern匹配的内容。
字母n或N:代表向前或向后继续寻找。
字母g:跳到第一行;字母G:跳到最后一行;输入数字再加字母g:则跳转到对应的行。
输入!<command>:可以执行shell命令。

JavaScript获取元素位置

[code lang="js"]
/*
获取元素的位置属性可以通过
HTMLElement.offsetLeft
HTMLElement.offsetTop
但是,这两个属性所储存的数值并不是该元素相对整个浏览器画布的绝对位置,
而是相对于其父元素位置的相对位置,也就是说这两个数值得到的是以其
父元素左上角为(0,0)点从而计算出的数值。所以我们要得到她的绝对位置,
那么我们必须依次向上获取他的父元素的位置,
然后获取它父元素的父元素的offersetLeft和offersetTop,
一直递归到浏览器的整个画布横纵距离的时候,例如
*/
/*获取元素的纵坐标*/
function getTop(e){
var offset=e.offsetTop;
if(e.offsetParent!=null){
offset+=getTop(e.offsetParent);
}
return offset;
}
/*获取元素的横坐标*/
function getLeft(e){
var offset=e.offsetLeft;
if(e.offsetParent!=null){
offset+=getLeft(e.offsetParent);
}
return offset;
}

[/code]
[code lang="js"]
/*
获取元素的绝对位置,
无非是根据元素距浏览器左边(left)和顶部(top),
我们可以稍稍改变一下得到一方法
*/
function getElemPos(obj){
var pos = {"top":0, "left":0};
if (obj.offsetParent){
while (obj.offsetParent){
pos.top += obj.offsetTop;
pos.left += obj.offsetLeft;
obj = obj.offsetParent;
}
}else if(obj.x){
pos.left += obj.x;
}else if(obj.x){
pos.top += obj.y;
}
return {x:pos.left, y:pos.top};
}

[/code]

如何循序渐进有效学习 Javascript ?

本文摘自克军兄知乎上的回答,给自己打个Tips~大家共同进步吧~
btw: 如果还有哪位朋友没有知乎邀请,可以直接给我留言(注明需要知乎邀请),我会邀请你们。

1. 选本好书:
JavaScript: The Good Parts
http://book.douban.com/subject/2994925/

JavaScript高级程序设计
http://book.douban.com/subject/4886879/

2. 阅读源码:

https://github.com/languages/JavaScript

3. 实践、实践、再实践

4. 多关注行业动态,参与开源社区
这几个blog至少要订阅
http://www.nczonline.net/blog/
http://javascriptweblog.wordpress.com/
http://dailyjs.com/
http://functionsource.com/
http://www.reddit.com/r/javascript/

2011年十月份电脑攒机配置单

以后每个月月底,写一次攒机配置单,分为3个阶层——低、中、高,需要攒PC的同志们拿去吧。得到实惠好处后一定要拿回来反馈一下,期待你们的回复哦。

虽然此套配置单是本月份的低端部分,使用起来已经可以用飞速来表达了,和往年的低端PC相比早已不能同日而语了。为什么这么说呢,要说2M缓存对目前游戏还有一些瓶颈,3M已经不存在任何瓶颈了。可以说,对任何游戏或显卡都不会构成瓶颈了。进一步说,如果把G620超频到3.6以上已经可以秒杀AMD所有的双核和三核了,如果超到4G,估计秒杀全家都没啥问题了。但是我们还是不推荐超频,超频对系统的稳定性要求很高,不光主板的承受能力;还包括CPU散热器,机箱的空间、风道,电源的稳定性等等,都需要考虑在内。所以我们说,默认频率已经很好了,已经能享受到机器瞬间反应很快了,还超频做啥呢?

英特尔(Intel)32纳米 奔腾 双核处理器 G620盒装CPU(LGA1155/2.6GHz/3M三级缓存)
http://www.360buy.com/product/393803.html

华硕(ASUS)P8H61-M LE主板(Intel H61/LGA 1155)
http://www.360buy.com/product/434664.html

G.SKILL(芝奇)DDR3 1600 4G台式机内存(F3-12800CL9S-4GBRL)
http://www.360buy.com/product/302693.html

西部数据(Western Digital) Caviar Blue 1TB WD10EALX 7200转 32M SATA 6 Gb/s 台式机硬盘
http://www.360buy.com/product/338123.html

酷冷至尊(CoolerMaster)特警430 中塔机箱 (黑色)RC-430-KWN1
http://www.360buy.com/product/245960.html

台达(DELTA)电源 Smart400 额定400W 主动式
http://www.360buy.com/product/313182.html

先锋(Pioneer)DVR-219CHV 24X 串口DVD刻录机(黑色)
http://www.360buy.com/product/273238.html

戴尔(DELL)E2210 22英寸宽屏液晶显示器
http://www.360buy.com/product/180761.html

更换域名记

写博客有几年了,期间博客PR最高是3,后来一段时间没写就荒废了。
中途换过几次域名,.org.cn、.net、.org、.me、.info等等等几乎都换了个遍。
一直想换个.com的域名,自己想到的,想好的名字却一直都有人注册。
甚至为此还买了一个Backorder,半年多的时间,中途相中的几个域名都被毫不留情的续费了。
毕竟好的域名人人都爱,短域名更是不在话下,好的域名都被收入囊中。
唯一一次的比较遗憾的,.co域名出来的时候没能把握住抢注的机会比较遗憾,
比如adobe.co、apple.co等等都还未注册的时候,自己却没有抓住。
这次选的这个域名的意义是两重的,首先,nightly的意义是每晚的、每晚地,
还有一层就是Nightly是Firefox的测试版本,寓意不断的挖掘与进步。
而Jobs的意义就比较明了了,代表Steve Jobs,希望能借助jobs的名号激励自己。
常换域名真的伤不起,希望这次是最后一次换域名,只因Nightly Jobs

abc

还记得高中英语老师炫耀abc的意思是“入门”,目前自己的技术水平也仅仅可以用此来形容。不得不加快自己的学习进度,耐的住寂寞,耐的住寂寞,耐的住寂寞。年前买的D7000已经几个月没拿出来,先上一张五月北大拍的花花吧~

学习前端开发的书目推荐以及注意事项

感谢Sivan的推荐,详细如下:

最好XHTML和CSS同步看,有了一定了解再学js。

先看《深入浅出HTML与CSS、XHTML》和《精通CSS》一起,看完重构页面没什么问题。

偏重构可以继续泛读《网站重构》、《HTML & XHTML权威指南》、《CSS禅意花园》、《超越CSS》、《Eric Meyer谈CSS(卷1&2)》、《无懈可击的Web设计1&2》这些。

偏开发可以看《HTML5高级程序设计》、《Javascript DOM编程艺术》、《ppk谈JavaScript》等。

最好的实践我觉得是做相对完整的项目,比如做一个完整Wordpress主题。

《深入浅出HTML与CSS、XHTML》这本书,已经看了二百多页了。
书写得非常好很容易理解,把很多繁琐不容易记住的知识,
不断的讨论、深化、直到深刻的理解,最后记住。
书籍的选择还是很重要的,再次感谢Sivan