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);
       }
    
  • 相关阅读:
    10-多线程笔记-2-锁-3-Lock-4-工具类
    09-多线程笔记-2-锁-3-Lock-3-ReadWriteLock
    08-多线程笔记-2-锁-3-Lock-2-Lock
    07-多线程笔记-2-锁-3-Lock-1-AQS
    空闲时间无聊写的一个软著源代码文档生成器
    Centos7.x创建lvm
    cups API
    debezium 使用踩坑
    hive 行列转换
    mac 上docker 容器动态暴露端口
  • 原文地址:https://www.cnblogs.com/yukun/p/1128100.html
Copyright © 2011-2022 走看看