基本概念

语法

  • 区分大小写,ECMAScript中的一切(变量、函数名和操作符)都区分大小写。函数名不能使用typeof,因为它是一个关键字,但typeOf可以。
  • 标识符,指的是变量、函数、属性的名字,或者函数的参数。第一个字符必须是一个字母、下划线或者$符号。不能将关键字、保留字、true、false和null用作标识符。
  • 注释,包括单行注释和跨级注释。单行注释以两个斜杆开头,块级注释以一个斜杠和一个星号开头,以一个星号和一个斜杠结尾。
  • 严格模式为JavaScript定义了一种不同的分析与执行模式。

    function doSomething(){
      "use stric";
      //函数体
    };
  • 语句以一个分号结尾,如果省略分号,则由解析器确定语句的结尾。

关键字和保留字

  • 关键字可用于表示控制语句的开始或者结束,或者用于执行特定操作等。 关键字是语言保留的,不能用作标识符。

变量

  • 变量是松散型的,可以保存任何类型的数据。定义变量的时候要使用var操作符。

数据类型

  • typeof操作符。"undefined"这个值未定义、"boolean"这个值是布尔值、"string"这个值是字符串、"number"这个值是数值、"object"这个值是对象或者null、"function"这个值是函数。
  • Undefined类型只有一个值,就是特殊的undefined。在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。一般不存在需要把一个变量设置为undefined的情况,字面值undefined的主要目的是用于比较。

    var message;//这个变量声明之后默认取得了undefined值
    //下面这个变量并没有声明
    //var age
    alert(message);//"undefined"
    alert(age);//报错
    alert(typeof message);//"undefined"
    alert(typeof age);//"undefined"
  • Null类型只有一个值,就是特殊的null,从逻辑角度看,null值是一个空对象指针,因此用typeof操作符检测null值时会返回"object"。undefined是派生自null的。

    alert(null==undefined);//true
  • Boolean类型有两个值,true和false。要将一个值转换成对应的Boolean值,可以调用Boolean()

图片描述

  • Number类型包括整数和浮点数值,基本数值字面量格式是十进制整数,除了十进制外还有八进制十六进制。八进制第一位必须是0,十六进制第一位必须是0x。

    • 浮点数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。保存浮点数值需要的内存空间是保存整数的两倍。
    • ECMAScript 能够表示的最小数值保存在Number.MIN_VALUE中,在大多数浏览器中,这个值是5e-324
    • 能够表示的最大数值保存在Number.MAX_VALUE中——在大多数浏览器中,这个值是1.7976931348623157e+308。
    • 如果某次计算的结果得到了一个超出JavaScript数值范围的值,那么这个数值将被自动转换成特殊的Infinity值。
    • 具体来说,如果这个数值是负数,则会被转换成-Infinity负无穷,如果这个数值是正数,则会被转换成Infinity正无穷。
    • NaN是一个特殊数值,任何涉及NaN的操作都会返回NaN,NaN与任何值都不相等,包括NaN本身。

      alert(isNaN(NaN))//true
      alert(isNaN(10))//false
      alert(isNaN("10"))//false
      alert(isNaN("blue"))//true
      alert(isNaN(true))//false
    • 三种函数可以把非数值转换成数值,Number()、parseInt()、parseFloat()

      var num1=Number("Hello world!")//NaN
      var num2=Number("")//0
      var num3=Number("000011")//11
      var num4=Number(true)//1
      var num5=parseInt("1234blue"); // 1234
      var num6=parseInt(""); // NaN
      var num7=parseInt("0xA"); // 10(十六进制数)
      var num8=parseInt(22.5); // 22
      var num9=parseInt("070"); // 56(八进制数)
      var num10=parseInt("70"); // 70(十进制数)
      var num11=parseInt("0xf"); // 15(十六进制数)
      var num12=parseInt("AF", 16); //175
      var num13=parseInt("AF"); //NaN
      var num14=parseInt("10", 2); //2 (按二进制解析)
      var num15=parseInt("10", 8); //8 (按八进制解析)
      var num16=parseInt("10", 10); //10 (按十进制解析)
      var num17=parseInt("10", 16); //16 (按十六进制解析)
      var num18=parseFloat("1234blue"); //1234 (整数)
      var num19=parseFloat("0xA"); //0
      var num20=parseFloat("22.5"); //22.5
      var num21=parseFloat("22.34.5"); //22.34
      var num22=parseFloat("0908.5"); //908.5
      var num23=parseFloat("3.125e7"); //31250000
  • String类型用于表示由零或多个16位Unicode字符组成的字符序列,字符串。可以用单引号或者双引号表示,没有区别。

    • 字符字面量,也叫转义序列
      图片描述
    • 字符串一旦创建就不可改变。
    • 将一个值转换为字符串有两种方法,toString()、String(),null和undefined没有toString方法

      var age = 11;
      var ageAsString = age.toString(); // 字符串"11"
      var found = true;
      var foundAsString = found.toString(); // 字符串"true"
      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"
      var value1 = 10;
      var value2 = true;
      var value3 = null;
      var value4;
      alert(String(value1)); // "10"
      alert(String(value2)); // "true"
      alert(String(value3)); // "null"
      alert(String(value4)); // "undefined"
  • Object类型可以通过new创建,是一组数据和功能的集合。

    var o=new Object();

操作符

  • 一元操作符,只能操作一个值的操作符:递增递减操作符、一元和加减操作符

    var num1 = 2;
    var num2 = 20;
    var num3 = --num1 + num2; // 等于 21
    var num4 = num1 + num2; // 等于 21
    var s1 = "2";
    var s2 = "z";
    var b = false;
    var f = 1.1;
    var o = {
      valueOf: function() {
        return -1;
      }
    };
    s1++; // 值变成数值 3
    s2++; // 值变成 NaN
    b++; // 值变成数值 1
    f--; // 值变成 0.10000000000000009(由于浮点舍入错误所致)
    o--; // 值变成数值-2
    var s1 = "01";
    var s2 = "1.1";
    var s3 = "z";
    var b = false;
    var f = 1.1;
    var o = {
      valueOf: function() {
          return -1;
      }
    };
    s1 = +s1; // 值变成数值 1
    s2 = +s2; // 值变成数值 1.1
    s3 = +s3; // 值变成 NaN
    b = +b; // 值变成数值 0
    f = +f; // 值未变,仍然是 1.1
    o = +o; // 值变成数值-1
    var s1 = "01";
    var s2 = "1.1";
    var s3 = "z";
    var b = false;
    var f = 1.1;
    var o = {
      valueOf: function() {
          return -1;
      }
    };
    s1 = -s1; // 值变成了数值-1
    s2 = -s2; // 值变成了数值-1.1
    s3 = -s3; // 值变成了 NaN
    b = -b; // 值变成了数值 0
    f = -f; // 变成了-1.1
    o = -o; // 值变成了数值 1
  • 位操作符,32位整数。对于有符号的整数,前31位用于表示整数的值,第32位用于表示数值的符号,0表示正数,1表示负数。按位非,用波浪线(~)表示,执行按位非的结果就是返回数值的反码。按位与,用&表示。按位或,由竖线表示。按位异或,由^符号表示。左移(<<)。右移(>>)。无符号右移(>>>)

      var num1 = 25; // 二进制 00000000000000000000000000011001
      var num2 = ~num1; // 二进制 11111111111111111111111111100110
      alert(num2); // -26
      var num1 = 25;
      var num2 = -num1 - 1;
      alert(num2); // "-26"
      var result = 25 & 3;
      alert(result); //1
      25 = 0000 0000 0000 0000 0000 0000 0001 1001
      3 = 0000 0000 0000 0000 0000 0000 0000 0011
      ---------------------------------------------
      AND = 0000 0000 0000 0000 0000 0000 0000 0001
      var result = 25 | 3;
      alert(result); //27
      25 = 0000 0000 0000 0000 0000 0000 0001 1001
      3 = 0000 0000 0000 0000 0000 0000 0000 0011
      --------------------------------------------
      OR = 0000 0000 0000 0000 0000 0000 0001 1011
      var result = 25 ^ 3;
      alert(result); //26
      25 = 0000 0000 0000 0000 0000 0000 0001 1001
      3 = 0000 0000 0000 0000 0000 0000 0000 0011
      ---------------------------------------------
      XOR = 0000 0000 0000 0000 0000 0000 0001 1010
      var oldValue = 2; // 等于二进制的 10
      var newValue = oldValue << 5; // 等于二进制的 1000000,十进制的 64
      var oldValue = 64; // 等于二进制的 1000000
      var newValue = oldValue >> 5; // 等于二进制的 10 ,即十进制的 2
      var oldValue = 64; // 等于二进制的 1000000
      var newValue = oldValue >>> 5; // 等于二进制的 10 ,即十进制的 2
  • 布尔操作符,逻辑非(!)、逻辑与(&&)、逻辑或(||)

      alert(!false); // true
      alert(!"blue"); // false
      alert(!0); // true
      alert(!NaN); // true
      alert(!""); // true
      alert(!12345); // false
      alert(!!"blue"); //true
      alert(!!0); //false
      alert(!!NaN); //false
      alert(!!""); //false
      alert(!!12345); //true
      var found = true;
      var result = (found && someUndefinedVariable); // 这里会发生错误
      alert(result); // 这一行不会执行
      var found = true;
      var result = (found || someUndefinedVariable); // 不会发生错误
      alert(result); // 会执行("true")
  • 乘性操作符,乘法(*)、除法(/)、求模(%)
  • 加性操作符,加法,减法

      var result1 = 5 + 5; // 两个数值相加
      alert(result1); // 10
      var result2 = 5 + "5"; // 一个数值和一个字符串相加
      alert(result2); // "55"
      var result1 = 5 - true; // 4,因为 true 被转换成了 1
      var result2 = NaN - 1; // NaN
      var result3 = 5 - 3; // 2
      var result4 = 5 - ""; // 5,因为"" 被转换成了 0
      var result5 = 5 - "2"; // 3,因为"2"被转换成了 2
      var result6 = 5 - null; // 5,因为 null 被转换成了 0
  • 关系操作符,返回布尔值。"23"和3比较,"23"小于3。
  • 相等操作符,相等(==)、不相等(!=)、全等(===)、不全等(!==)
  • 条件操作符,var max = (num1 > num2) ? num1 : num2;如果num1大于num2,则将num1的值赋给max,如果num1小于或等于num2,则将num2的值赋给max
  • 赋值操作符
  • 逗号操作符,多用于声明多个变量,还可用于赋值。var num=(5,4,3);//num值为3

函数

  • 通过访问argument对象的length属性可以获知有多少个参数传递给了函数。函数没有重载,名字只属于后定义的函数

      function howManyArgs() {
          alert(arguments.length);
      }
      howManyArgs("string", 45); //2
      howManyArgs(); //0
      howManyArgs(12); //1
    
      function doAdd() {
        if(arguments.length == 1) {
          alert(arguments[0] + 10);
        } else if (arguments.length == 2) {
          alert(arguments[0] + arguments[1]);
        }
      }
      doAdd(10); //20
      doAdd(30, 20); //50
    
      function addSomeNumber(num){
          return num + 100;
      }
      function addSomeNumber(num) {
          return num + 200;
      }
      var result = addSomeNumber(100); //300

神膘护体小月半
406 声望6 粉丝