javascript语言精粹【前言&精华&语法】
前言&精华
这是一本介绍javascript语言本质的权威书籍,值得任何正在或准备从事javascript开发的人阅读,并且需要反复阅读。学习、理解、实践大师的理想,我们才能站在巨人的肩上,才有机会超越大师,这本书就是开始。
"取其精华,去其糟粕"本就是前人告诉我们的学习态度与方法,对日新月异的IT领域来说更该如此。当我们面对这些层出不穷的新技术理念时,不要匆忙地照单全收或全盘否定。找到最适合工作或自己感兴趣的技术,并用科学的方法潜心来坚持学习还研究,我们同样也可以成为大师!
javascript:可靠,易读,易于维护,轻量又富有表现力
javascript建立在一些非常好的想法和少数坏的想法之上。
那些好的想法包括函数、弱类型、动态对象和一个富有表现力的对象字面量表示法。
那些坏的想法包括基于全局变量的编程模型。
javascript的函数主要是基于词法作用域的顶级对象。javascript是第一个成为主流的lambda语言。
现在大部分语言中都流行要求强类型,原理在于强类型允许编译器在编译时检测错误。我们能越早检测和修复错误,付出的代价就越小。javascript是一门弱类型的语言,所以javascript编译器不能检测出类型错误。
jsLint:javascript解析器,它能分析javascript问题并报告它包含的缺点。JSLint提供了一般在javascript开发中缺少的严谨性。它能让你确信你的程序只包含精华的部分。
语法
铁路图,又叫语法图(syntax diagrams),是一种表示形式语法的方式,是巴科斯范式和扩展巴科斯范式的图形化表示法。理解这些图的规则很简单:
从左边界开始沿着轨道去到右边界
沿途,你将在圆框中遇到的是字面量,在方块中遇到的是规则或描述
任何沿着轨道能走通的序列都是合法的
任何不能沿着轨道走通的序列都是非法的
每个末端只有一个竖条的铁路图允许在任何一对标记中插入空白。而在末端有两个竖条的铁路图则不允许。
空白:空白可能表现为格式化字符串或注释的形式。空白通常没有意义,但是偶尔须要用它来分隔字符序列,否则它们就会被合并成一个单一的符号。
标识符:字母开头,包含字母数字下划线。不能用保留字或者可能成为保留字的字符
【数字(number)】:javascript只有一个单一的数字类型。它在内部被表示为64位的浮点数。它没有分离出整数类型,所以1和1.0是相同的值。这提供了很大的方便,因为它完全避免了短整数的溢出问题,并且你需要知道的关于数字的一切就是它是一种数字。
如果一个数字的字面量有指数部分,那么这个字面量的值是由e之前的部分乘以10的e之后部分的次方计算出来的。所以100和1e2是相同的数字(1*10的2次方)。
值NaN是一个数值,它表示一个不能产生正常结果的运算结果。NaN不等于任何值,包括它自己,可以用isNaN(number)检测NaN。
1 isNaN(10) //false
2 isNaN('dda')//true
3 isNaN('10')//false
【字符串(string)】可以包含单引号或双引号。javascript在被创建的时候,Unicode是一个16位的字符集,所以javascript中的所有字符串都是16位的。
转义字符允许把那些正常情况下不被允许的字符串插到字符串中,比如反斜线,引号和控制字符。\u约定允许指定用数字表示的字符码位。
"A"==="\u0041"
【语句】一个编译单元包含一组可执行的语句。在web浏览器中,每个<script>标签都提供一个被编译且立即执行的编译单元。因为缺少链接器,javascript把它们一起抛入一个公共的全局名字空间中。
链接器(Linker)是一个程序,将一个或多个由编译器或汇编器生成的目标文件外加库链接为一个可执行的文件。
当var语句被调用在函数内部时,它定义了这个函数的私有变量。
switch、while、for和do语句允许有一个可选的前置标签(label),它配合break语句来使用。
语句往往按照从上到下的顺序被执行。javascript可以通过条件语句(if和switch)、循环语句(while、for和do)、强制跳转语句(break、return和throw)和函数调用改变这个执行顺序。
代码块是包在一堆花括号中的一组语句。
【if】 语句根据表达式的值改变程序的控制流程,如果表达式的值为真,那么执行then代码块,否则,执行可选的else分支。
//下面列出的值被当作假 false null undefined 空字符串 ' ' 数字0 数字NaN
//其他所有值都为true,包括"false",以及所有对象
【switch】执行一个多路分支。它把其表达式的值和所有指定的case条件进行匹配。其表达式可能产生一个数字或字符串。当找到一个精确的匹配时,执行匹配的case从句中的语句。如果没有找到任何匹配,则执行可选的default语句。
为了防止继续执行下一个case,case语句后应该跟随一个强制跳转语句。可以用break语句退出一个switch语句。
【while】执行一个简单的循环。如果表达式值为假,那么循环将终止。表达式为真时,代码块将被执行。
【for】语句是一个结构更复杂的循环语句,它有两种形式:
1、常见的形式由三个可以选从句控制:初始化从句(initialization),条件从句(condition)和增量从句(increment)。首先,initialization被执行,它的作用通常是初始化循环变量。接着计算condition的值。典型的情况是它根据一个完成条件检测循环变量。如果condition被省略掉,则假定返回的条件是真。如果condition的值为假,那么循环将终止。否则,执行代码块,然后执行increment,接着循环会重复执行condition。
2、【for in 语句】会枚举一个对象所有属性名(或键名)。在每次循环中,对象的另一个属性名字符串被赋值给for和in之间的变量。
通常你须通过检测object.hasOwnProperty(variable)来确定这个属性名就是对象的成员,还是从其原型链里找到的。
for(myvar in obj){
if(obj.hasOwnProperty(myvar)){
....
}
}
【do】像while 一样,唯一的区别是它在代码块执行之后而不是之前检测表达式的值。这就意味着代码块将总是执行至少一次
【try】执行一个代码块,并捕获该代码块抛出的任何异常。catch从句定义了一个新的变量,它将接受该异常对象,throw语句抛出一个异常。如果throw语句在一个try代码块中,那么控制权会跳到catch从句中。如果throw语句在函数中,则该函数调用被放弃,且控制权会跳到调用该函数的try语句的catch从句中。
【return】return会是一个函数提前返回,它可以指定要被返回的值,如果没有指定返回表达式,那么其返回的是undefined。
【break】会退出一个循环或者switch语句
【表达式】
最简单的表达式是字面量值(比如字符串或数字)、变量、内置的值(true,false,null,undefined,NaN和Infinity)
以new前导的调用表达式
以delete前导的属性存取表达式
包在圆括号中的表达式
以一个前缀运算符作为前导的表达式
或者表达式后面根着:
一个插入运算符与另一个表达式
三元运算符?后面跟着另一个表达式,然后接一个:再然后三个表达式
一个函数调用
一个属性存取表达式

【字面量】
对象字面量、数组字面量
【函数】它可以有个可选的名字,用于递归的调用自己。它可以指定一个参数列表,这些参数将作为变量由调用时传递的实际参数(arguments)初始化。

浙公网安备 33010602011771号