zoukankan      html  css  js  c++  java
  • 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);
       }
    
  • 相关阅读:
    Linux内核RPC请求过程
    二分图
    Java实现 蓝桥杯 算法提高 合并石子
    Java实现 蓝桥杯 算法提高 合并石子
    Java实现 蓝桥杯 算法提高 摩尔斯电码
    Java实现 蓝桥杯 算法提高 摩尔斯电码
    Java实现 蓝桥杯 算法提高 文本加密
    Java实现 蓝桥杯 算法提高 文本加密
    Java蓝桥杯 算法提高 九宫格
    Java蓝桥杯 算法提高 九宫格
  • 原文地址:https://www.cnblogs.com/yukun/p/1128100.html
Copyright © 2011-2022 走看看