当前位置: 代码迷 >> JavaScript >> javascript语言精髓读书笔记――第二章
  详细解决方案

javascript语言精髓读书笔记――第二章

热度:115   发布时间:2013-08-04 18:26:16.0
javascript语言精粹读书笔记――第二章

书中用铁路图来描述语法

特意看了维基百科的连接,总结下Syntax_diagram的规则:

  • 从左边开始,沿着轨道到右边界
  • 沿途在圆框中遇到的是字面量,方框中遇到的是规则和描述
  • 沿着轨道能走通的都是合法的
  • 任何沿着轨道不能走通的都是非法的
  • 末端有一条竖线的标示允许在任意一对符号中间插入空白,而在末端有两个竖条不允许。

在维基百科的连接:http://en.wikipedia.org/wiki/Syntax_diagram

关于注释:/* */存在一些安全隐患建议使用//注释

  • 标示符:

开头字母,后面跟字母、数字、下划线,不能使用保留字

  • 数字:

只有一个数字类型。在内部表示为64位浮点数。没有分理出整型,so 1和1.0的值是相同的

指数的表示100表示为1e2

NaN是一个数值,表示一个不能产生正常结果的运算,可以用函数isNaN(number)来检测NaN

数字拥有方法。javascript有一个对象Math,它包含一套作用于数字的方法。

例如:Math.floor(number)把一个数字转换成整数

  • 字符串:
javascript中所有的字符都是16位的,被包含在一对“”或‘’之间,可能包括0个或多个字符。
\代表转义字符,它允许正常情况下不被允许的字符集插入到字符串
例如:\u约定用来指定数字字符编码“A” === “\u0041”? \b backspace \n newline
有length属性“seven”.length 是5
可以用+运算符连接字符串,来创建新字符串
字符串也有方法例如:‘cat’.toUpperCase() === 'CAT'
  • 语句
var 语句被用在函数内部时,它定义的是函数的私有变量
switch,while,for,do允许有一个可选的前置标签(label)它配合break使用
语句通常按照从上到下的顺序执行,javascript可以通过条件语句(if 和switch)、循环语句(while,for,do)、强制跳转语句(break、return、throw)和函数调用来改变执行顺序
代码块是包含在{}中的一组语句,javascript的代码块不会新建作用域,因此变量应该定义在函数的头部下面的值被当做假:
false
null
undefined
‘’
0
NaN
其他都是真,包括true、‘false’,以及所有的对象
for语句有两种形式
第一种由三个可选从句控制:初始化从句(initialization)、条件从句(condition)、增量从句(increment)
执行顺序:首先执行condition,他的作用通常是初始化循环变量,接着计算condition的值,如果condition被省略掉,则假定返回的是真。如果condition为假终止循环。否则,执行代码,然后执行increment,接着重复执行condition
另一种形式(for in)会枚举一个对象的所有属性名(或键名)。在每次循环中,object的下一个属性名字符串被赋值给variable。
通常要检测object.hasOwnProperty(variable)来确定属性名是该对象的成员,还是来自于原型链
try、catch、throw
try语句执行一个代码块,并捕获该代码块抛出的任何异常。catch从句定义一个新的variable来接收抛出的异常对象。
throw语句抛出一个异常,如果throw语句在一个try代码块中,那么控制流会跳转到catch从句中。
如果throw语句在函数中,则该函数调用被放弃,控制流跳转到调用该函数的try语句的catch从句
?
throw语句中的表达式通常是一个对象字面量,他包含一个name属性和一个message属性。异常捕获器可以根据这些信息决定该做什么。
  • 表达式
最简单表达式是字面量(字符串、数字等)、
变量
内置的值
new开头的表达式
delete开头的属性提取表达式
包在圆括号中的表达式
前置运算符+表达式
表达式后面+
  • ? 一个中置预算符与另一个表达式
  • ? ?表达式1:表达式2
  • ?函数调用
  • ? 属性提取表达式
运算符的优先级
. [] ()
delete new typeof + - !
* / %
+ -
>= <= > <
=== !==
&&
||
?:
对运算符的解释:
typeof运算符产生的值包括:‘number’、‘string’、‘boolean’、‘undefined’、‘function’、‘object’
&&如果第一个运算符的值为假,产生第一个运算符的值,否则产生第二个运算符的值
||如果第一个运算符的值为真,产生第一个运算符的值,否则产生第二个运算符的值
函数的调用运算符是跟随在函数名后面的括号
()或(expression,expression,……
属性提取
.name或[expression]
  • 字面量
对象字面量
??? 是一种可以方便的按指定规格创建新对象的表示法。
??? 属性名可以是标识符或字符串。这些名字被当做字面量名而不是函数名对待,所以对象的属性名在编译的时候才能知道。属性的值就是表达式。数字字面量??? 是一种可以方便的按指定规格创建新数组的表示法。
函数字面量
??? 函数字面量定义了函数的值。
??? 它可以有一个可选的名字,用于递归调用自己。可以指定一个参数列表,这些参数就像变量一样在调用时由实际参数初始化,函数体包括变量定义的语句
?
  相关解决方案