• 《JavaScript高级程序设计》笔记之'ECMAScript基础'


    1.变量是弱类型。
    可以存放任意类型的值。如:
    var test ="hi";
    alert(test);//output "hi"
    test=55;
    alert(test);//outputs "55"

    2.原始值和引用值。
    变量可以存放两种类型的值,即原始值和引用值。
    原始值(primitive value)是存储在栈(stack)中的简单数据段。也就是存储在变量访问的位置。
    引用值(reference value)是存储在堆(heap)中的对象。放在变量(栈空间)中的值是该对象在堆中的地址。

    3.原始类型。
    原始类型包括Undefined,Null,Boolean,Number,String五类。
    Undefined:指声明了变量但未初始化的值.

    Null:则用于尚未存在的对象。
    Boolean值:
    有两个值True和False

    Number:既可以表示32位整数,又可以表示64位浮点数

    String:存储Unicode字符串

    4.原始类型转换。
    (1)转换成字符串。
    用toString()方法。对Boolean输出"true"或"false".对于Number类型,分为默认模式和基模式。如:
    var bFound=false;
    alert(bFound.tostring()); //outputs "false"

    var iNum1=10.0;
    alert(iNum1.tostring()); //outputs "10" //默认模式
    var iNum2=10;
    alert(iNum2.tostring(2)); //outputs "1010" //基模式
    alert(iNum2.tostrin(8)); //outputs "12"
    (2)转换成数字。
    用parseInt()和parseFloat()。只有对String类型转换,对其他类型返回的都是NaN。如:
    var iNum1=parseInt("123blue"); // return 123 ***
    var iNum2=parseInt("0xA"); // return 10
    var iNum3=parseInt("22.5"); // return 22
    var iNum4=parseInt("blue"); // return NaN
    (3)强制类型转换。
    <1> Boolean(value):
    var b1=Boolean(""); //false    
    var b1=Boolean(0); //false 
    var b1=Boolean(null); //false 
    其他返回true
    <2> Number(value):
    Number("123abcd"); //NaN //对整个值,而不是部分
    <3> String(value):与toString()的唯一区别就是对null和undefined强制类型转换成为"null"和"undefined",而toString()不行。

    5.引用类型。
    Boolean类、Number类、String类。
    (1) Number类。
    方法举例:
    var oNumberObject=new Number(99);
    alert(oNumberObject.toFix(2)); //outputs "99.00" //2代表两位小数
    (2)String类。
     属性有length.
     方法有charAt(),charCodeAt(),concat(),+,indexOf(),lastIndexOf(),localeCompare(),slice(),substring(),substr(),toLowerCase(),toUpperCase()等。举例:
     
     //查找指定位置的单个字符
     var oStringObject=new String("hello world");
     alert(oStringObject.charAt(1)); //outputs "e"
     alert(oStringObject.charCodeAt(1)); //outputs "101" //Unicode编码
     
     //连接
     sResult=oStringObject.concat(",oh!"); //等同于sResult=oStringObject+",oh!"
     alert(sResult); //outputs "hello world,oh!"
     alert(oStringObject);//outputs "hello world"
     
     //指定子串在另一字符串中的位置,如果没找到返回-1
     alert(oStringObject.indexOf("o")); //outputs "4"
     alert(oStringObject.lastIndexOf("o")); //outputs "7"
     
     //indexof(,)内的第二个参数表示从第几个字符开始计数 如查找子串所有位置的例子:
     var pos=oStringObject.indexOf("o"); //###
     while(pos!=-1) //outpus "4" "7"
     {
       alert(pos);
       pos=oStringObject.indexOf("o",pos+1);
     } 
     
     //创建子串
     alert(oStringObject.substring(3)); //outputs "lo world"
     alert(oStringObject.slice(3)); //outputs "lo world"
     alert(oStringObject.substring(3,7)); //outputs "lo w" //注意7位置上的"0"不显示
     alert(oStringObject.substr(3,2)); //outputs "lo" //表示从第三个字符开始的2个字符 //###
     
     //slice()与substring的区别在于,处理负参数时,substring将其做0对待,如:
     alert(oStringObject.substring(-3)); //outputs "hello world"
     alert(oStringObject.substring(3,-4)); //outputs "hel"
     alert(oStringObject.slice(3,-4)); //outputs "lo w"

    6.typeof和instanceof
    var sTemp= "test string";
    alert(typeof sTemp); //outputs "string"

    var oStringObject=new String("hello world");
    alert(oStringObject instanceof String); //outputs "true" //问的是"变量oStringObject是String类的实例吗?"

    7.运算符
    void返回undefined,通常用于避免不应输出的值。
    <a href="javascript:window.open('about:blank')">Click Me</a><!--  此处window.open()返回的是新打开的窗口,该对象被转换成要显示的字符串,所以出错,应为: -->
    <a href="javascript:void(window.open('about:blank'))">Click Me</a>

    (1) 位运算符
    NOT ~,AND &,OR |,XOR ^
    其中NOT分三步处理:转换成32数字,把二进制数取反,把改反码转换成浮点数。如:
    var iNum1=25;
    var iNum2=~iNum1;
    alert(iNum2); //outputs "-26"
    (2) Boolean运算符
    逻辑NOT !,逻辑AND &&,逻辑OR ||
    (3) 关系运算符
    var bResult="Brick"<"alphabet";
    alert(bResult); //outputs "true" //B和a的字符代码分别为66和97


    var bResult="23"<"3";
    alert(bResult); //outputs "true" 
    var bResult="23"<3;
    alert(bResult); //outputs "false"  //这是因为字符串"23"和数字比较时,字符串被转换成了数字23。***

    var bResult="a">3;
    alert(bResult); //outputs "false"  //这是因为字符串"a"不能转换为数字,而调用parseInt()返回NaN. ***

    8.无重载
    但可以通过arguments对象达到同样效果,如:
    function doAdd()
    {
    if(arguments.length==1)
    {
    alert(arguments[0]);
    }
    else if(arguments.length==2)
    {
    alert(arguments[0]+arguments[1]);
    }
    }
    doAdd(10); //outputs "10" //我们可以看到,自定义的函数可以接受任意多个参数,ECMAScript不会验证传递的参数个数是否与定义的参数个数相等。
    doAdd(10,50); //outputs "60"

    9.Function类
    最令人感兴趣的莫过于,函数实际上是个对象! 
    (1)function sayHi(sName)
    {
      alert(sName);
    }
    //所以可如此定义:
    var sayHi =new Function("sName","alert(\"Hello\"+sName);");
    (2)因为函数是个对象,所以也有属性和方法。
    <1> length属性,返回参数个数,如:
    alert(sayHi.length); //outputs "1"
    <2> valueOf()和toString()方法,返回函数的代码,如:
    alert(sayHi.toString());

  • 相关阅读:
    Java数据结构之栈(Stack)
    Java数据结构之单向环形链表(解决Josephu约瑟夫环问题)
    Java数据结构之双向链表
    zookeeper:JavaApi操作节点
    zookeeper:3
    单例模式
    zookeeper:2
    架构版本
    zookeeper:1
    Java反射
  • 原文地址:https://www.cnblogs.com/engine1984/p/1494482.html
Copyright © 2020-2023  润新知