zoukankan      html  css  js  c++  java
  • JavaScript高级程序设计学习笔记--基本概念

    1.语句

    ECMAScript中的语句以一个分号结尾;如果省略分号,则由解析器确定语句的结尾,如下例所示:

    var sum=a+b //即使没有分号也是有效的语句--推荐
    var diff=a-b; //有效的语句--推荐

    虽然语句结尾的分号不是必需的,但我们建议任何时候都不要省略它。两个原因:1.加上分号可以避免很多错误 2.加上分号也会在某些情况下增进代码的性能,因为这样解析器
    就不必再花时间 推测应该在哪里插入分号了。

    2.变量

    var message="hi";

    像这样初始化变量并不会把它标记为字符串类型,初始化的过程就是给变量赋一个值那么简单。因此,可以在修改变量值的时候修改值的类型,如下所示:

    var message="hi";
    message=10; //有效,但不推荐

    可以像下面那样省略var操作符,从而创建一个全局的变量:

    function test(){
    message="hi"; //全局变量
    }
    test();
    alert(message): //hi

    可以使用一条语句定义多个变量,用逗号分隔:

    var message="hi",found=false,age=29;

    3.typeof操作符

    typeof可以用来检测变量的数据类型。对一什值使用typeof操作符可能返回下列某个字符串
    “undefined”---未定义
    “boolean”---布尔值
    “string”---字符串
    “number”---数值
    “object”---对象或Null
    "function"---函数
    下面是几个使用typeof操作符的例子:

    var message="some thing";
    alert(typeof message); //"string"
    alert(typeof (message)); //"string" typeof是操作符而不是函数,圆括号可以使用,但不是必需的
    alert(typeof 95); //"number"

    4.undefined类型

    在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined,例如:

    var message;
    alert(message==undefined); //true

    这个例子与下面是等价的

    var message=undefined;
    alert(message==undefined); //true

    对于一个尚未声明过的变量,只能执行一项操作,即使用typeof操作符检测其数据类型。

    var message;
    //下面这个变量并没有声明
    //var age
    alert(age); //产生错误
    alert(typeof message); //undefined
    alert(typeof age); //undefined

    5. Null类型

    typof操作符检测null值时会返回“object”

    6.boolean类型

    boolean类型的值只有两个:true和false。但ECMAScript中所有类型的值都有与这两个boolean等价的值。要将一个值转换为boolean,可以调用转型函数Boolean():

    var message="Hi";
    var messageAsBoolean=Boolean(message);

    7.number类型

    八进制的第一位必须是0,然后是八进制数字序列(0-7),如果字面值中的数值超出范围,那么前导零将被忽略,后面的数值当作十进制来解析

    var octalNum1=070; //八进制的56 
    var octalNum2=079; //十进制的79

    十六进制前面两位必须是0x,

     浮点数值

    var floatNum1=1.1;
    var floatNum2=0.1; 
    var floatNum3=.1; //小数点前面没有数据,有效但不推荐 

    e表示法:var floatNum=3.125e7; //等于31250000
    浮点数的精度问题:浮点数的最高精度是17位数,但在进行算术计算时其精度确远不如整数。例如,0.1+0.2的结果不是0.3,而是0.300000000000000004。

    这个小小的误差导致无法测试特点的浮点数值,例如:

    if(a+b==0.3)
    { 
    alert(“you got a 0.3”);
    }

    如果这两个数是0.05和0.25,或者0.15和0.15都不会有问题。但如前面所述,如果这两个数是0.1和0.2,那么测试将无法通过

    8. NaN

    NaN,即非数值(Not a Number),用于表示一个本来要返回数值的操作数未返回数值的情况。
    任何涉及NaN的操作(例如NaN/10)都会返回NaN
    NaN与任何值都不相等,包括NaN本身。

    9.数值转换

    Number()函数:如果是null值,返回0;如果是undefined,返回NaN;空字符串,返回0;
    parseInt()函数:空字符串会返回NaN. parseInt()能够识别出各种整数格式,如果字符串以“0x”开头且后跟数字字符,就会将其当作一个十六进制整数;
    字符串以“0”开头且后跟数字字符,就会将其当作一个八进制整数来解析。例如:

    var num1=parseInt("1234blue"); //1234
    var num1=parseInt(""); //NaN
    var num1=parseInt("0xA"); //10(十六进制数)
    var num1=parseInt("22.5"); //22
    var num1=parseInt("070"); //56(八进制数)
    var num1=parseInt("70"); //70(十进制数)
    var num1=parseInt("0xf"); //15(十六进制数)

    parseInt()还有第二个参数:转换时使用的基数(即多少进制)。如果知道要解析的值是十六进制,那么就指定基数为16,以保证得到正确的结果。如:

    var num1=parseInt("0xaf",16); //175

    如果指定了第二个参数,字符串可不带前面的0x,如:

    var num1=parseInt("af",16); //175
    var num1=parseInt("af"); //NaN

    不指定基数意味着让parseInt()决定如何解析输入的字符串,因此为了避免错误的解析,我们建议无论在什么情况下都明确指定基数。

    10. String类型

    字符串是不可变的,也就是说,字符串一旦创建,它们的值就不能改变。
    数值、布尔值、对象和字符串都有toString()方法,但Null和undefined值没有这个方法。多数情况下,调用toString()方法不必传递参数,但是,在调用数值的toString()方法时
    ,可以传递一个参数:输出数值的基数。可以输出二进制、八进制、十六进制等 。

    var num=10;
    alert(num.toString()); //10
    alert(num.toString(2)); //1010
    alert(num.toString(8)); //12
    alert(num.toString(10)); //10
    alert(num.toString(16)); //a

    11.操作符

    一元加和减操作符:一元加操作符以一个加号表示(+)表示,放在数据面前,对数值不会产生任何影响,如:

    var num=25;
    num=+num; //25 其实就是一个正号

    不过在对非数值应用一元加操作符时,该操作符会像Number()转型函数一样对这个值执行转换。像布尔值false和true将被转换为0和1。
    逻辑与(&&)规则:
    如果第一个操作数是对象,则返回第二个操作数;
    如果第二个操作数是对象,则只有在第一个操作数的求值结果为true时情况下才返回该对象;
    如果两个操作都都是对象,则返回第二个操作数;
    如果有一个操作数是null,则返回null;
    如果有一个操作数是NaN,则返回NaN;
    如果有一个操作数是undefined,则返回undefined;
    逻辑或(||)规则:
    如果第一个操作数是对象,则返回第一个操作数;
    如果第一个操作数的求值结果为false,则返回第二个操作数;
    如果两个操作都都是对象,则返回第一个操作数;
    如果两个操作数是null,则返回null;
    如果两个操作数是NaN,则返回NaN;
    如果两个作数是undefined,则返回undefined;
    可以用逻辑或来为避免为变量赋null或undefined值,如:
    var myObject=preferredObject||backupObject; //preferredObject不为null则值为preferredObject,否则为第二个值backupObject
    加性操作符:
    如果有一个操作数是NaN,则结果是NaN;
    如果只有一个操作数是字符串,则将另一个操作数转换为字符串,然后再将两个字符串拼接起来。
    忽视加法操作符中的数据类型是ECMAScript编程中最常见的一个错误,看个例子:

    var num1=5,num2=10;
    var message="the sum of 5 and 10 is"+num1+num2;
    alert(message); //"the sum of 5 and 10 is 510"

    关系操作符:<,>,<=,>=
    如果一个操作数是数值,则将另一个操作数转换为数值,然后执行数值比较。
    任何操作数与NaN进行关系比较,结果都是false.

    var result=NaN<3; //false

    相等操作符:
    null和undefined是相等的。
    全等和不全等:全等操作符由3个等于号(===)表示,它只在两个操作数未经转换就相等的情况下返回true,如下面所示:

    var result=("55"==55); //true,因转换后相等
    var result=("55"===55); //,因转换后相等

    逗号操作符:
    用于赋值时,逗号操作符总会返回表达式中的最后一项,如下面的例子所示:

    var num=(5,1,8,4,0);//num的值为0

    12.语句

    for语句
    由于ECMAScript中不存在块级作用域,因此在循环内部定义的变量也可以在外部访问到,如:

    var count=10;
    for(int i=0;i<count;i++)
    {
    alert(i);
    }
    alert(i); //10

    for语句中的初始化表达式、控制表达式和循环后表达式都是可选的。将这三个表达式全部省略,就会创建一个无限循环,如:

    for(;;){
    doSomething();
    }

    for-in 语句
    ECMAScript对象的属性没有顺序。因此,通过for-in循环输出的属性名的顺序是不可预测的。具体来说,所有属性都会被返回一次,但返回的先后次序可能会因浏览器而异。
    break和continue语句
    break和continue语句都可以与label语句联合使用,从而返回代码中特定的位置。这种联合使用的情况多发生循环嵌套的情况下,如下所示:

    var num=0;
    outermost:
    for(var i=0;i<10;i++){
    for(var j=0;j<10;j++){
    if(i==5&&j==5){
    break outermost;
    }
    num++;
    }
    }
    alert(num); //55

    with语句
    with语句的作用是将代码的作用域设置到一个特定的对象中,由于大量使用with语句会导致性能下降,同时也会给调试代码造成困难,因此在开发大型应用程序时,不建议使用with语句。
    switch语句
    switch语句在比较值时使用的是全等操作符,因此不会发生类型转换(例如,字符串“10”不等)

    13.函数

    函数return语句也可以不带任何返回值,在这种情况下,函数在停止执行后将返回unedfined。
    理解参数:函数的参数与大多数其他语言的参数不同。ECMAScript函数不介意传递进来多少个参数,也不在乎传进来参数是什么数据类型。也就是说,即使你定义的函数只接收
    两个参数,在调用这个函数时也未必一定要传递两个参数,可以传递一个、三个甚至不传参数,而解析器永远不会有什么怨言。之所以这样,是因为ECMAScript中的参数在内部
    是通过一个数组来表示的。函数接收到的始终都是这个数组,而不关心数组中包含哪些参数(如果有参数的话)。实际上,在函数体内可以通过arguments对象来访问这个数组,从
    而获取传递给函数的第一个参数。
    如果只传入了一个参数,那么arguments[1]设置的值不会反应到命名参数中,这是因为arguments对象的长度是由传入参数个数决定的,不是由定义函数的命名参数决定的。
    函数没有重载。

  • 相关阅读:
    Ueeidor 使用
    springMvc 拦截器
    redis 设置密码
    freemarker 定义公共header
    freemarker macro 使用
    freemarker ! 用法
    Android 远程连接数据库。。。。。
    Android Studio 配置
    Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
    表单,table的css
  • 原文地址:https://www.cnblogs.com/Gyoung/p/3698205.html
Copyright © 2011-2022 走看看