javascript高级程序设计(2)--ECMAScript基础

一、语法

ECMA的基础概念如下:

1、大小写区分

2、变量是弱类型的

3、没行结尾的分号可有可无

二、原始值和引用值

1、原始值:存储在栈中的简单数据段,它们的值是直接存储在变量访问的位置,这个和.net中的基本类型应该是差不多的

2、引用值:存储在堆中的对象,与.net中的引用类型差不多。

给变量赋值时,ECMAScript解释程序必须解释该值是否为原始类型,原始类型有5中: Null、Number、primitive type、String、Boolean

三、原始类型

3.1 typeof 运算符

对变量或值调用typeof返回下列值之一:

1、"undefined"

2、object

3、string

4、number

5、boolean

注意: 对于null值使用typeof返回的是object,这是当时ECMAScript实现的一个错误,后来沿用了这个错误

3.2 Undefined类型

是声明的变量未初始化时,该变量的默认值是undefined


注意,值undefined并不同于未定义的值。但是,typeof运算符并不真正区分这两种值。考虑下面的代码:

var otemp;

alert(typeof otemp); //输出undefined

alert(typeof otemp2); //输出undefined

这里typeof 并不区分这未定义和初始化的,但是对于未定义的进行运算符操作就会引起错误

var otemp;

alert(otemp==undefined) //output true

alert(otemp2==undefined) //error

3.3 Null类型

即使alert(null=undefined)输出是true,但是Null类型的值与undefined类型标识的含义不同,undefined表示的定义了但未初始化,而null则表示尚未存在的对象

3.4 Number类型

几个特殊的值用于Number类型,前两个是Number.MAX_VALUE和Number.MIN_VALUE,它们定义了number类型值得外边界。当计算大于MAX_VALUE时,就被赋予POSITIVE_INFINTY,当计算小于MIN_VALUE,就被赋予NEGATIVE_INFINTY.有专门的值表示为无穷大,就是INFINTY,负无穷就是-INFINTY.另外一个特殊值NaN,表示非数。

4、转换

4.1转换成字符串

对于所有对象都有toString()方法,toString()对于Number类型有两种形式一个是默认模式,另一个是基模式

默认模式,对于所有的number类型,转化为十进制的数字形式,对于基模式,选择相应的基数,其自动对其进行转换

var iNum=10;

alert.(iNum.toString(2) ) //output 1010

alert(iNum.toString(8) //output 10

alert(iNum.toString(16) // ouput A

4.2 转换成数字

提供了两种把非原始数字形式转化成数字的方法,即parseInt() 和parseFloat(),只有对string类型运用此方法才能运行,其他的都返回为NaN.

这里parseInt()与toString()一样可以指定基数。

var iNum=parseInt("10",2); //returns 2

var iNum=parseInt("10",8) //returns 8

var iNum=parseInt("10",10) //returns 10
5、引用类型

5.1 Object类型

ECMAScript中的所有类都由这个类继承而来,object类中的所有属性和方法都会出现在其他类中。Object类具有下面这些属性

  • Constructor --对创建对象函数的引用
  • Prototype --对该对象的对象原型的引用

Object具有的一些方法:

  • HasOwnProperty(property) --判断是否具有某个属性
  • IsPrototypeOf(object) --判断该对象是否为某个对象的原型
  • PropertyIsEnumerable(property) --判断属性是否能够枚举
  • ToString() --返回对象的原始字符串表示
  • ValueOf() --返回最适合该对象的原始值

5.2 Boolean类型

下面只想说一个比较容易犯错的地方

var oFalseObject=new Boolean(false);

var bResult=oFalseObject && true //returns true

这是为什么呢? 对于这里false&&true应该是true,问题在于Boolean这里是对象,oFalseObject计算出来是true,所以是true&&true,结果当然是很true,因此为了避免这种情况,最好还是使用boolean的原始值,而使用这个对象来构造他

5.3Number类型

Number类型的一些方法

  • toFixed() --具有指定位数小数的数字的字符串表示(参数:小数位数)
  • toExponential() -- 返回用科学计数法表示的数字的字符串形式 (参数: )
  • toPrecision() --根据最有意义的性形式来返回数字的预订形式或指数形式,参数指定的是数的数字总数(即有效数字) (参数:有效数字的位数)

5.4 String类型

方法:

  • charAt() --根据参数中指定的返回字符串中的字符 (参数: 指定的位置)
  • charCodeAt() --根据参数指定的返回字符串中的字符代码 (参数: 指定的位置)
  • concat() --连接字符串 (参数: 需要连接的字符串)
  • indexOf() --返回的是指定的字符子串中在另一个字符串中的位置,从开始查找,没有找到返回-1 (参数:查找的字符子串)
  • lastIndexOf() --返回的是指定的字符子串中在另一个字符串中的位置,从末尾查找 ,没有找到返回-1 (参数:查找的字符子串)
  • localCompare() --比较,若相同则返回0,大于返回1,小于返回-1
  • substring() 返回指定字符串中部分字符串,指定一个或两个参数,第二个参数可选,第一个参数指定截取的起始位置,第二个参数结束位置(那个字符不包括在内),若没有则默认为字符串的长度
  • slice() --返回指定字符串中部分字符串,指定一个或两个参数,第二个参数可选,第一个参数指定截取的起始位置,第二个参数结束位置(那个字符不包括在内),若没有则默认为字符串的长度
    var str="hello world";

alert(str.substring(3)); //output 'lo world'

alert(str.slice(3)); //output 'lo world'

alert(str.substring(3,7)); //output 'lo w';

alert(str.slice(3,7)); //output 'lo w';

那么对于substring 和slice上面是一样的,只有对于当参数是负数时才有不同,对于负数参数,slice会用字符串的长度加上这个参数,而substring则使用0代替

alert(str.slice(-3)); //output 'rld'

alert(str.substring(-3)); //output 'hello world'

alert(str.substring(3,-4);// output 'hel'

alert(str.slice(3,-4)); //output 'lo w'

  • toLowerCase() 、toUpperCase() 转换大小写

6、函数

函数是ECMAScript的核心,函数的一般声明形式

function functionName(arg1,arg2,arg3...){statement;}

如果函数无明确的返回值,或调用了没有参数的return语句,那么它真正返回的值是undefined.ECMAScript不支持重载,但是它用另外的方式来实现重载的功能

6.1 auguments对象

使用特殊对象auguments,开发者无需明确指出参数名,就能访问他们,auguments[0]就是第一个参数的值,还可以使用auguments.length检测传递给函数的参数个数。通过这样的方法就知道可以实现重载方法了,假设实现toString的重载方法

      function toString()
 {
  if(auguments.length==0)
  {
   //todo:重载版本1
  }
  else
  {
   switch(auguments[0])
   {
    case 2:
                           //todo:二进制字符串
                        。。。。//其他的一些相应实现
   }
  }
 }


6.2 Function类

使用Function类创建函数的语法如下:

var function_name=new Function(arg1,arg2,functionbody);

这里每个参数的字符串。


这有助于理解函数只不过是一种引用类型

6.3闭包

闭包是指词法表示包括不必不必计算的变量的函数,也就是说,该函数能使用函数外定义的变量。如下一个里

   var sMessage="hello world";  
   function sayHello()
   {
           alert(sMessage);
   }
posted @ 2008-03-28 19:02  枫崖  阅读(216)  评论(0编辑  收藏  举报