P51 JavaScript中提供了专门的函数和方法用来做更精确的数字到字符串和字符串到数字的转换:

数字—>字符串

 

  1. toString()  
  2. toString(n)  //n进制  
  3. toFixed(x)  
  4. toExponetia(x)  
  5. toPrecision(x)  

字符串—>数字

  1. paresInt() //只解析整数  
  2. paresFloat()  
  3. paresInt(“3 bind mice”) //=>3  
  4. paresFloat(“3.14 meters”) //=>3.14  

 

 

 

 

P52 对象转换为原始值

toString():将对象转换为字符串,如

  1. [1,2,3].toString()  //=>” 1,2,3”  
  2. (function(x){f(x);}).toString()   //=>” function(x){\nf(x);\n}”  
  3. /\d+/g.toString()  //=>” /\\d+/g”  
  4. new Date(2010,0,1).toString()  //=>”Fri Jan 01 2010 00:00:00 GMF 0800(PST)”  

 

 

valueOf():将对象转换为数字,如

  1. new Date(2010,0,1).valueOf()  //=>1262332800000 

具体见P49 3-2

 

P49 JavaScript中对象有:

*自定义对象:{}

*自定义数组:[]

*自定义函数:function(){}

*内置函数:Number()String()Boolean()Object()

*内置对象 (P45) new Date()new Number()new RegExp()new String()new Object() new Array()

*正则表达式(P45):同new RegExp()

 

P95 函数定义有两种写法:

1

 

  1. var f =   
  2.     function(x){  
  3.         return x+1;  
  4.     } 

2

  1. function f(x){  
  2.     return x+1;  

 

P74 = 赋值运算符

== 相等运算符(允许任意类型的操作数)

=== 恒等运算符

!= 不相等运算符(允许任意类型的操作数)

!= 不恒等运算符

 

P75 JavaScript对象的比较是引用的比较,而不是值得比较,对象只有和其本身相等,但和其他任何对象都不相等。

严格相等“===”运算符:

如果两个值类型不相同,则它们不相等;

如果两个值都是nullundifined,则不相等;

如果其中一个值是NaN,或者两个值都是NaN,则不相等;

NaN和其他任何值都是不相等的,包括它本身。所以通过x!==x来判定x是否为NaN。只有xNaN的时候,这个表达式的值才为true

如果两个值为数字且数值相等,则它们相等;

如果两个值为字符串,且所含的对应位上的16位数完全相等,则它们相等;

如果两个引用值指向同一个对象、数组或函数,则它们是相等的。

 

相等运算符“==

如果两个值类型不相同,则不一定不相等;

如果一个值是null,另一个是undefined,则它们相等;

如果一个值是数字,另一个是字符串,先将字符串转换成数字,然后用转换后的值比较;

如果其中一个值是true,则将其转换为1再进行比较;

如果其中一个值是false,则将其转换为0再进行比较;

如果一个值是对象,另一个值是数字、字符串,则使用3.8.3节所提到的转换规则将对象转换为原始值,然后再进行比较,对象通过toString()valueOf()转换为原始值。JavaScript核心内置类先尝试用valueOf()后尝试toString()(除日期类外。日期类只能用toString()转换);

其他不同类型之间的比较不相等。

 

P76 只有数字和字符串才能真正执行比较操作,那些不是数字和字符串的操作数都将进行(隐式)类型转化,规则如下:

如果操作数为对象,则按3.8.3节所述先valueOf()比较,否则用toString()转换为原始值;

在对象转换为原始值后,如果两个操作数都是字符串,那么按照字母表的顺序进行比较;如果至少有一个原始值不是字符串,那么两个原始值都将转换为数字进行比较。

 

P77 大写字母小于小写字母,如

Zoo < aardvark

 

P77 加号运算符偏好字符串(如果有一个操作数是字符串的话,则进行字符串操作);

比较运算符更偏爱数字(如果有一个操作数为数字,则另一个操作数转换为数字再作比较)。

 

P77 <=”和“>=”比较运算符在判断相等的时候,并不依赖于相等运算符和严格相等运算符的比较规则。相反,小于等于运算符是简单的“不大于”,大于等于运算符也只是“不小于”。

 

P78 当其中一个操作数是(或转换后是)NaN的时候,所有4个比较均返回false

P78 in运算符,左操作数是一个字符串或可以转换为字符串,右操作数是一个对象,表示对象是否拥有属性名或方法名为左操作数的属性或方法,若拥有返回true,否则返回false

P78 instanceof 运算符,左操作数是一个对象,右操作数是一个标识对象的类,如果左操作数是右侧类的实例,则返回true,否则返回false

 

P78 所有对象都是object的实例。

P87 typeof返回值为表示操作数类型的一个字符串

 

x

typeof  x

原始值

数字或NaN

“number”

字符串

“string”

truefalse

“boolean”

对象

函数

“function”

对象

“object”

宿主对象

由编译器各自实现的字符串

其他

undefined

“undefined”

null

“object”

 

 

P110 throw语句(自定义抛出异常)

if(x<0){

 throw new Error(“x不能是负数”)

}

 

P111 处理异常

try{

       两种异常(一种是throw语句,另一种是方法间接抛出(隐式异常))

}catch(e){

       可以用throw重新显示抛出异常

}finally{

}

 

P111 尽管catchfinally都是可选的,但try从句需要至少二者之一与之组成完整的语句。

P112 当由于returncontinuebreak语句使得解释器跳出try语句时,解释器在执行新的目标代码之前先执行finally块中的逻辑。

P112 如果没有catch语句只有finally,那么会隐式地向上抛出异常(不过如果finally中使用了return\continue\breakthrow语句,那么尽管已经抛出了异常且这个抛出的异常还没有处理,这个方法依然会正常返回)