第三章:基本概念

第三章

1. 语法

1.1 区分大小写

 + 如,函数名不可以用 *typeof*  但可以使用 *typeOf*。

1.2 标识符

 + 指的是变量、函数、属性的名字,或者函数的参数。
 + 第一个字符必须是一个字母、下划线、或者一个 *$* 符号
 + 其它字符可以是字母、下划线、*$* 、或数字。
 + 按照惯例,ECMAScript 标识符使用驼峰大小写格式。 例如:myCar

1.3 注释

 + ECMAScript 使用 C 风格的注释,包括单行注释和块级注释。单行注释以两个斜杠开头,如下所示:

   // 单行注释

 + 块级注释以一个斜杠和一个星号(/*)开头,以一个星号和一个斜杠(*/)结尾,如下所示:

     /*
     *  这是一个多行
     *  (块级)注释
     */

 + 虽然上面注释中的第二和第三行都以一个星号开头,但这不是必需的。之所以添加那两个星号,纯粹是为了提高注释的可读性(这种格式在企业级应用程序中极其常见)。

1.4 严格模式


   "use strict";
   //例:
   function doSomething() {
       "use strict";
       //函数体
   }

1.5 语句

 // 尽量加上分号或者花括号等。

   if (test)
       alert(test);//有效但容易出错,不要使用
   
   if (test) {      //推荐使用
       alert(test);
   }

2. 关键字和保留字

3. 变量

3.1 定义变量使用 var


   var message;//像这样未初始化的值,会保存一个特殊的值 ——undefined
  
  • 可以使用一条语句定义多个变量。

    var message = 'hi',
       found = false,
       age = 18;
    

3.2 尽量不要修改变量所保存值的类型

3.3 全局变量

  • 若在函数中使用 var 定义一个变量,那么这个变量在函数执行完就会被销毁。但如果省略 var ,则会创建一个全局变量。

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

4. 数据类型

4.1 基本数据类型(5种):

  • Undefined、Null、Boolean、Number 和 String。

    4.2 复杂数据类型(1种):

  • Object,Object 本质上是由一组无序的名值对组成的。

    4.3 typeof 操作符

 // 检测给定变量的数据类型

 // 对一个值使用 typeof 操作符可能返回下列某个字符串:

     "unde“undefined·——如果这个值未定义;
     “boolean“——如果这个值是布尔值;
     “string“——如果这个值是字符串;
     “number"—一如果这个值是数值;
     “object“——如果这个值是对象或 nul1;
     “function“——如果这个值是函数;

// typeof 对于未初始化和为声明的变量执行 typeof 操作符都返回 undefined 值。
    var message;
    alert(typeof message);// "undefined"
    alert(typeof message);// "undefined"

4.4 Undefined 类型

  • 只有一个值,即特殊的 undefined

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

4.5 Null类型

  • 只有一个值,即特殊的 null 。从逻辑的角度来看 null 值表示一个空对象指针,所以使用 typeof 操作符检测 null 值时会返回 "object"

    var car = null;
    alert(typeof car);// "object"
    
  • 实际上,undefined 值是派生自 null 值的

    alert(null = undefined);//true
    

4.6 Boolean 类型

  • 只有两个字面值: true 和 false

  • 将一个值转换为对应的 Boolean 值,用调用转型函数 Boolean( )

    var message="Hello world!"; 
    var messageAsBoolean=Boolean(message);
    
    数据类型 转为 true 的值 转为 false 的值
    Boolean true false
    String 任何非空字符串 ""(空字符串)
    Number 任何非零数字值(包括无限大) 0 和 NaN
    Object 任何对象 null
    undefined n/a (意思是 “不适用” ) undefined

4.7 Number 类型

var octalNuml=070;//八进制的56
var octalNum2=079;//无效的八进制数值——解析为79
var octalNum3=08;//无效的八进制数值——解析为8

var hexNuml=0xA;//十六进制的10
var hexNum2=0x1f;//十六选制的31

//在进行算数计算时,都最终被转换为十进制进行计算
  • 浮点数值

    • 所谓浮点数值,就是该数值中必须包含一个小数点,并小数点后至少有一位数字

      var floatNuml=1.1;
      var floatNum2=0.1;
      var floatNum3=.1;//有效,但不推荐
      
  • 如果小数点后没有数字或浮点数本身表示的就是一个证书,南无该值会被转换为整数

    var floatNuml=1.;//小数点后面没有数字—一解析为1
    var floatNum2=10.0;//整数一—解析为10
    
  • 对于极大的数或极小的数用 e (科学计数法)

    var floatNum = 3.125e7;//等于31250000
    
  • 不要对浮点数进行相等判断

    var a = 0.1,
        b = 0.2;
    if (a + b == 0.3) { //不要做这样的测试
        alert('You got 0.3。')
    }
    // 0.1 + 0.2 的值是0.3000000000000004
    //但对于其他值,如 0.15 + 0.25 就没有问题
    
  • 数值范围

    • 最大值: Number.MAX_VALUE
    • 最小值: Number.MIN_VALUE
    • 若一个值超出范围,则自动转换为特殊的 Infinity
    • 若这个值为负数,则自动转换为 -Infinity
    • 确定一个数值是不是有穷的
  • NaN (Not a Number)

    • 在 js 中,任何数值除以 0 会返回 NaN
    • NaN 与任何值都不相等,包括 NaN 本身
  • isNaN()

  • 任何不能被转换为数值的都会返回 true

    alert(isNaN(NaN));//true 
    alert(isNaN(10));//false(10是一个数值)
    alert(isNaN(“10“));//false(可以被转换成数值l0)
    alert(isNaN(“blue“));//true(不能转换成数值)
    alert(isNaN(true));//false(可以被转换成数值1)
    
  • 数值转换

    • Number()

      /*
      如果是Boolean值,true和false将分别被转换为1和0。
      如果是数字值,只是简单的传入和返回。
      如果是nu11值,返回0。
      如果是undefined,返回NaN。
      如果是字符串,遵循下列规则:
      如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即“1会变成1,·123“会变成123,而·011“会变成11(注意:前导的零被忽略了);a如果字符串中包含有效的浮点格式,如1.1,则将其转换为对应的浮点数值(同样,也会忽略前导零);如果字符串中包含有效的十六进制格式,例如“0x,则将其转换为相同大小的十进制整数值;a如果字符串是空的(不包含任何字符),则将其转换为0;如果字符串中包含除上述格式之外的字符,则将其转换为NaN。
      如果是对象,则调用对象的valueof()方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的tostring()方法,然后再次依照前面的规则转换返回的字符串值。
      */
      var numl=Number("Hello world!");//NaN 
      var num2=Number("");//0
      var num3=Number("000011");//11
      var num4=Number(true);//1
      
  • var numl=parseInt(“1234blue");//1234
    var num2=parseInt("");//NaN 
    var num3=parseInt("0xA");//10(十六进制数)
    var num4=parseInt(22.5);//22
    var num5=parseInt(“070");//56(八进制数)
    var num6=parseInt("70");//70(十进制数)
    var num7=parseInt(“OXf");//15(十六进制数)
    
    //第二个参数:指定进制
    var num=parseInt("0XAF",16);//175
    var numl=parseInt("AF",16);//175
    var num2=parseInt("AF");//NaN
    var numl= parseInt(“10",2);//2(按二进制解析)
    var num2=parseInt(“10“,8);//8(按八进制解析)
    var num3=parseInt(“10”,10);//10(按十进制解析)
    var num4=parseInt(“10",16);//16(按十六进制解析)
    
  • parseFloat()

    var numl=parseFloat("1234blue");//1234(整数)
    var num2=parseFloat("0xA");//0 十六进制始终会被转换为0
    var num3=parseFloat("22.5");//22.5
    var numd=parseFloat("22.34.5");//22.34
    var num5=parseFloat("0908.5");//908.5
    var num6=parseFloat("3.125e7");//31250000
    

4.8 String 类型

  • 单引号,双引号都可以

  • 任何字符串的长度都可以通过其 length 属性取得

    var text = "This is the letter sigma"
    alert(text.length);// 输出 24
    
  • 字符串特点

    • 字符串一旦创建,它们的值就不能改变。
  • 转化为字符串

    • toString()

      var age=11;
      var ageAsString =age.tostring();//字符串”11“
      var found=true;
      var foundAsString=found.tostring();//字符串“true”
      
      • 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"
        // 在 null 和 undefined 值没有 toString() 方法
        
    • String()

      • 可以将任何类型的值转换为字符串

        //如果值有tostring()方法,则调用该方法(没有参数)并返回相应的结果;
        //如果值是nu11,则返回“nu11”;
        //如果值是undefined,则返回“undefined"。
        
        var valuel=10; 
        var value2=true;
        var value3=nul1;
        var value4;
        
        alert(String(valuel));//"10*
        alert(String(value2));//"true"
        alert(String(value3));//"nul1"
        alert(String(value4));//"undefined"
        

4.9 Object 类型

  • ECMAScript中的对象其实就是一组数据和功能的集合。

    var o = new Object();
    varo=new Object;//有效,但不推荐省哈圈括号
    
  • Object的每个实例都具有下列属性和方法。

    • Constructor:保存着用于创建当前对象的函数。
    • hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定例如:o.hasOwnProperty("name")
    • isPrototypeOf(object):用于检查传入的对象是否是另一个对象的原型
    • propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举。与hasOwnProperty()方法一样,作为参数的属性名必须以字符串形式指定。
    • toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
    • toString():返画对象的字符串表示。
    • valueof():返回对象的字符串、数值或布尔值表示。通常与tostring()方法的返回值相同。

5. 操作符

5.1 一元操作符

  • ++ 和 -- 运算

    • 运算符在前面,先自加(减)再进行运算

    • 运算符在后面,先运算再进行自加(减)

      var age = 29;
      var anotherAge = --age + 2;
      alert(age);//输出28
      alert(anotherAge);//输出30
      
      var numl = 2;
      var num2 = 20;
      var num3 = --numl + num2;//等于21
      var num4 = numl + num2;//等于21
      
    • 这 4 个操作符对任何值都适用

      • 在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减1的操作。字符串变量变成数值变量。

      • 在应用于一个不包含有效数字字符的字符串时,将变量的值设置为NaN,字符串变量变成数值变量。

      • 在应用于布尔值false时,先将其转换为0再执行加减1的操作。布尔值变量变成数值变量。

      • 在应用于布尔值true时,先将其转换为1再执行加减1的操作。布尔值变量变成数值变量。

      • 在应用于浮点数值时,执行加减1的操作。

      • 在应用于对象时,先调用对象的 valueof()方法,以取得一个可供操作的值。然后对该值应用前述规则。如果结果是NaN,则在调用 tostring()方法后再应用前述规则。对象变量变成数值变量。

        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
        

5.2 一元加和减操作

  • 一元加操作符:+

    var num = 25;
    num = +num;//仍然是25
    
    //对于非数值应用时,该操作符会像 Number() 转型函数一样
    var Sl = "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 num = 25;
    num = -num;//变成了-25
    
    //对于非数值应用时,该操作符会遵循一元加运算符同样的规则,然后再将数值转换为负数
    var sl = "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
    

5.3 位操作运算符

  • 按位非:用波浪线(~)表示,执行按位非的结果是返回数值的 反码

    var numl = 25; 
    var num2 = -numl - 1; 
    alert(num2);//"-26"
    //这也验证了按位非操作的本质:操作数的负值减1。
    
  • 按位与(AND)用 & 表示

    第一个数值的位 第二个数值的位 结果
    1 1 1
    1 0 0
    0 1 0
    0 0 0
var result = 25 & 3; 
alert(result);//1

 25=00000000000000000000000000011001
  3=00000000000000000000000000000011
---------------------------------------
AND=00000000000000000000000000000001
  • 按位或(OR):|
    | 第一个数值的位 | 第二个数值的位 | 结果 |
    | :------------: | :------------: | :--: |
    | 1 | 1 | 1 |
    | 1 | 0 | 1 |
    | 0 | 1 | 1 |
    | 0 | 0 | 0 |

    var result = 25 | 3; 
    alert(result);//27
    
    25=00000000000000000000000000011001
     3=00000000000000000000000000000011
    -------------------------------------
    OR=00000000000000000000000000011011
    
  • 按位异或(XOR):^

    第一个数值的位 第二个数值的位 结果
    1 1 0
    1 0 1
    0 1 1
    0 0 0
    var result = 25 ^ 3; 
    alert(result);//26
    
     25=00000000000000000000000000011001
      3=00000000000000000000000000000011
    --------------------------------------
    XOR=00000000000000000000000000011010
    

5.4 左移

  • 由 << 表示

    var oldValue = 2;//等于二进制的10
    var newValue = oldValue << 5;//等于二进制的1000000,十进制的64
    

5.5 右移

  • 有符号的右移,由 >> 表示

    • 以符号位来填充空位
    var oldValue = 64;//等于二进制的1000000
    var newValue = oldValue >> 5;//等于二进制的10,即十进制的2
    
  • 无符号的右移,用 >>> 表示

    • 以 0 来填充空位

      var oldValue = -64;//等于二选制的11111111111111111111111111000000
      var newValue = oldValue >>> 5;//等于十进制的134217726
      

5.6 布尔操作符

  • 逻辑非

    • 由一个 ! 表示

      // 规则
      // 如果操作数是一个对象,返回false;
      // 如果操作数是一个空字符串,返回true;
      // 如果操作数是一个非空字符串,返回false;
      // 如果操作数是数值0,返回true;
      // 如果操作数是任意非0数值(包括Infinity),返回false;
      // 如果操作数是nu11,返回true;
      // 如果操作数是NaN,返回true;
      // 如果操作数是undefined,返回true。
      
      alert(!false);//true 
      alert(!"blue");//false 
      alert(!0);//true 
      alert(!NaN);//true 
      alert(!"");//true 
      alert(!12345);//false
      
    • 使用两个逻辑非就会模拟 Boolean()转型函数的行为

      alert(!!"blue");//true 
      alert(!!0);//false 
      alert(!!NaN);//false 
      alert(!!"");//false 
      alert(!!12345);//true
      
  • 逻辑与

    • 由 && 表示

    • 真值表

      第一个操作数 第一个操作数 结果
      true true true
      true false false
      false true false
      false false false
      // 规则
      // 如果第一个操作数是对象,则返回第二个操作数;
      // 如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象;
      // 如果两个操作数都是对象,则返回第二个操作数;
      // 如果有一个操作数是nu11,则返回nu11;
      // 如果有一个操作数是NaN,则返回NaN;
      // 如果有一个操作数是undefined,则返回 undefined。
      
    • 逻辑与操作属于短路操作,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值。对于逻辑与操作而言,如果第一个操作数是false,则无论第二个操作数是什么值,结果都不再可能是true了。
  • 逻辑或

    • 由 || 表示

    • 真值表

      第一个操作数 第一个操作数 结果
      true true true
      true false true
      false true true
      false false false
      // 规则
      // 如果第一个操作数是对象,则返回第一个操作数;
      // 如果第二个操作数的求值结果为 false ,则返回第二个操作数
      // 如果两个操作数都是对象,则返回第一个操作数;
      // 如果有一个操作数是 nu11,则返回 nu11;
      // 如果有一个操作数是 NaN,则返回 NaN;
      // 如果有一个操作数是 undefined,则返回 undefined。
      
    • 逻辑或操作属于短路操作,即如果第一个操作数为 true,那么就不会再对第二个操作数求值。

5.7 乘性操作符

  • 乘法

    • 由一个 * 表示,用于计算两个数值的乘积

      // 规则
      // 如果操作数都是数值,执行常规的乘法计算,即两个正数或两个负数相乘的结果还是正数,而如果只有一个操作数有符号,那么结果就是负数。
      // 如果乘积超过了 ECMAScript 数值的表示范围,则返回 Infinity 或 -Infinity;
      // 如果有一个操作数是 NaN,则结果是 NaN;
      // 如果是 Infinity 与 0 相乘,则结果是 NaN;
      // 如果是 Infinity 与非 0 数值相乘,则结果是 Infinity 或 -Infinity,取决于有符号操作数的符号;
      // 如果是 Infinity 与 Infinity 相乘,则结果是 Infinity;
      // 如果有一个操作数不是数值,则在后台调用 Number()将其转换为数值,然后再应用上面的规则。
      
  • 除法

    • 由一个 / 表示

      // 规则
      // 如果操作数都是数值,执行常规的除法计算,即两个正数或两个负数相除的结果还是正数,而如果只有一个操作数有符号,那么结果就是负数。
      // 如果商超过了 ECMAScript 数值的表示范围,则返回 Infinity 或 -Infinity;
      // 如果有一个操作数是 NaN,则结果是 NaN;
      // 如果是 Infinity 被 Infinity 除,则结果是 NaN;
      // 如果是零被零除,则结果是 NaN;
      // 如果是非零的有限数被零除,则结果是 Infinity 或 -Infinity,取决于有符号操作数的符号;
      // 如果是 Infinity 被任何非零数值除,则结果是 Infinity 或 -Infinity,取决于有符号操作数的符号;
      // 如果有一个操作数不是数值,则在后台调用 Number()将其转换为数值,然后再应用上面的规则。
      
  • 求余

    • 由 % 表示

      // 规则
      // 如果操作数都是数值,执行常规的除法计算,返回除得的余数;
      // 如果被除数是无穷大值而除数是有限大的数值,则结果是NaN;
      // 如果被除数是有限大的数值而除数是零,则结果是NaN;
      // 如果是Infinity被Infinity除,则结果是NaN;
      // 如果被除数是有限大的数值而除数是无穷大的数值,则结果是被除数;
      // 如果被除数是零,则结果是零;
      // 如果有一个操作数不是数值,则在后台调用Number()将其转换为数值,然后再应用上面的规则。
      
  • 加性操作符

    • 加法

      // 规则
      // 如果有一个操作数是NaN,则结果是NaN;
      // 如果是Infinity加Infinity,则结果是Infinity;
      // 如果是-Infinity加-Infinity,则结果是-Infinity;
      // 如果是Infinity加-Infinity,则结果是NaN;
      // 如果是+0加+0,则结果是+0;
      // 如果是-0加-0,则结果是-0;
      // 如果是+0加-0,则结果是+0。
      
      // 如果有一个操作数是字符串,那么就要应用如下规则:
      // 如果两个操作数都是字符串,则将第二个操作数与第一个操作数拼接起来;
      // 如果只有一个操作数是字符串,则将另一个操作数转换为字符串,然后再将两个字符串拼接起来。
      // 如果有一个操作数是对象、数值或布尔值,则调用它们的tostring()方法取得相应的字符串值,然后再应用前面关于字符串的规则。对于undefined和nu11,则分别调用string()函数并取得字符串“undefined“和“nul1"。
      
      var result1 = 5 + 5;//两个数值相加
      alert{result1);//10
      var result2 = 5 + “5";//一个数值和一个字符串相加
      alert(result2)://“55“
      
    • 减法

      // 规则
      // 如果两个操作符都是数值,则执行常规的算术减法操作并返回结果;
      // 如果有一个操作数是NaN,则结果是NaN;
      // 如果是Infinity减Infinity,则结果是NaN;
      // 如果是-Infinity减-Infinity,则结果是NaN;
      // 如果是Infinity减-Infinity,则结果是Infinity;
      // 如果是-Infinity减Infinity,则结果是-Infinity;
      // 如果是+0减+0,则结果是+0;如果是+0减-0,则结果是-0;
      // 如果是-0减-0,则结果是+0;
      // 如果有一个操作数是字符串、布尔值、nu11或undefined,则先在后台调用Number()函数将其转换为数值,然后再根据前面的规则执行减法计算。
      // 如果转换的结果是NaN,则减法的结果就是NaN;
      // 如果有一个操作数是对象,则调用对象的valueof()方法以取得表示该对象的数值。
      // 如果得到的值是NaN,则减法的结果就是NaN。
      // 如果对象没有valueof()方法,则调用其tostring()方法并将得到的字符串转换为数值。
      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 - nul1;//5,因为null被转换成了0
      

5.8 关系操作符

  • 小于(<)、大于(>)、小于等于(<=)和大于等于(>=),返回的都是布尔值

    // 规则
    // 如果两个操作数都是数值,则执行数值比较。
    // 如果两个操作数都是字符串,则比较两个字符串对应的字符编码值。(实际比较的是两个字符串中对应位置的每个字符的字符编码值。)
    var result = "Brick" < "alphabet";//true
    // 如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较。
    // 如果一个操作数是对象,则调用这个对象的valueof()方法,用得到的结果按照前面的规则执行比较。如果对象没有valueof()方法,则调用tostring()方法,并用得到的结果根据前面的规则执行比较。
    // 如果一个操作数是布尔值,则先将其转换为数值,然后再执行比较。
    

5.9 相等操作符

  • 相等和不相等

    • 相等操作符由两个等于号(==)表示,相等则返回 true

    • 不相等操作符由(!=)表示,不相等则返回 true

      // 这两个操作符会先转换操作数(称为强制转型),遵循以下规则
      // 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值—— false 转换为 0,而 true 转换为 1;
      // 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值;
      // 如果一个操作数是对象,另一个操作数不是,则调用对象的valueof()方法,用得到的基本类型值按照前面的规则进行比较;这两个操作符在进行比较时则要遵循下列规则。
      // nu11 和 undefined 是相等的。
      // 要比较相等性之前,不能将 nu11 和 undefined 转换成其他任何值。
      // 如果有一个操作数是 NaN,则相等操作符返回 false,而不相等操作符返回 true。重要提示:即使两个操作数都是 NaN,相等操作符也返回 false;因为按照规则, NaN 不等于 NaN。
      // 如果两个操作数都是对象,则比较它们是不是同一个对象。
      // 如果两个操作数都指向同一个对象,则相等操作符返回 true;否则,返回 false。
      
      表达式 表达式
      null == undefined true true == 1 true
      "NaN" == NaN false true == 2 false
      5 == NaN false undefined == 0 false
      NaN == NaN false null == 0 false
      NaN != NaN true "5" == 5 true
      false == 0 true
  • 全等和不全等

    • 全等由 3 个等于号(===)表示

      • 它只在两个操作数未经转换就相等的情况下返回 true

        var result1 =("55" == 55);//true,因为转换后相等
        var result2 =("55" === 55);//false,因为不同的数据类型不相等
        
    • 不全等操作符由一个叹号后跟两个等于号(!==)表示

      • 它在两个操作数未经转换就不相等的情况下返回 true

        var result1=(“55" != 55);//false,因为转换后相等var result2=(“55" !== 55);//true,因为不同的数据类型不相等
        

5.10 条件操作符(三元运算符)

var iable = boolean_expression ? true_value : false_value;
var max = (numl > num2) ? numl : num2;

5.11赋值运算符

  • 简单的复制运算符:=
  • 乘/赋值(*=);
  • 除/赋值(/=);
  • 模/赋值(%=);
  • 加/赋值(+=);
  • 减/赋值(-=);
  • 左移/赋值(<<=);
  • 有符号右移/赋值(>>=);
  • 无符号右移/赋值(>>>=);

5.12 逗号运算符

  • 使用逗号操作符可以在一条语句中执行多个操作

    var nunl=1, num2=2, num3=3;
    var nun=(5,1,4,8,0);//num的值为0
    

6. 语句

6.1 if 语句

if (i>25) (
    alert("Greater than 25.");
) else if (i<0) {
    alert("Less than 0.");
} else (
    alert("Between 0 and 25, inclusive.")
};

6.2 do-while 语句

  • 至少会执行一次

    vari=0; 
    do {
      i += 2;
    } while (i<10);
    alert(i);
    

6.3 while 语句

var i = 0; 
while (i < 10){
    i += 2;
}

6.4 for 语句

var count = 10;
for (var i = 0; i < count; i++){
    alert(i);
}
// for语句中的初始化表达式、控制表达式和循环后表达式都是可选的。将这两个表达式全部省略,就会创建一个无限循环,例如:
for(;;){    //无限循环
    doSomething();
}

6.5 for-in语句

  • 用来枚举对象的属性

    for (var propName in window) {
      document. write(propName);
    }
    
    

6.6 label 语句

start: for(var i=0;i< count;i++){
    alert(i);
}
// 这个例子中定义的start标签可以在将来由break 或continue语句引用。加标签的语句一般都要与for 语句等循环语句配合使用。
// 未添加 Label
var num = 0;
for(var i = 0; i < 10; i++) {
    for(var j = 0; j < 10; j++) {
        if(i == 5 && j == 5) {
            break;
        }
        num++;
    }
}
alert(num);//循环在 i= 5,j = 5 的时候跳出 j 循环,但会继续执行 i 循环,输出 95

//添加 Label
var num = 0;
outPoint:
for(var i = 0; i < 10; i++) {
    for(var j = 0; j < 10; j++) {
        if(i == 5 && j == 5) {
            break outPoint;
        }
        num++;
    }
}
alert(num);//循环在 i= 5,j = 5 的时候跳出双循环,输出 55

6.7 break 和 continue 语句

  • break 会立即退出循环,强制执行循环后面的语句

  • continue 会立即退出循环,然后回到循环的顶部继续执行

    var num = 0; 
    for(var i = 1; i < 10; i++){
      if(i % 5 == 0) {
          break;
        }
        num++;
    }
    alert(num);//4
    
    
    var num = 0; for(var i = 1; i < 10; i++){
      if(i % 5 == 0) {
          continue;
        }
        num++;
    }
    alert(num);//8
    
    
    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);//95
    
    

6.8 with 语句

  • 语法:with (expression) statement;

    // 定义 with 语句的目的主要是为了简化多次编写同一个对象的工作
    var gs = location.search.substring(1); 
    var hostName = location.hostname;
    var url = location.href;
    // 上面几行代码都包含 location 对象。如果使用 with 语句
    with(location) {
        var gs = search.substring(1); 
      var hostName = hostname;
      var url = href;
    }
    // 会导致性能下降,不建议使用
    

6.9 swich 语句

switch (expression) {
    case value:statement 
        break; 
    case value:statement 
        break; 
    case value:statement 
        break; 
    case value:statement 
        break;
    default:statement
}
// 虽然ECMAScript中的switch 语句借鉴自其他语言,但这个语句也有自己的特色。首先,可以在switch语句中使用任何数据类型(在很多其他语言中只能使用数值),无论是字符串,还是对象都没有问题。其次,每个case的值不一定是常量,可以是变量,甚至是表达式。请看下面这个例子:
switch("hello world"){
    case "hello"+"world": 
        alert("Greeting was found."); 
        break; 
    case "goodbye": 
        alert("Closing was found."); 
        break; default: 
        alert("Unexpected message was found.");
}

7. 函数

  • 通过 function 关键字来声明

    function sayHi(name,message) {
      alert("Hello"+name+","+message);
    }
    sayHi("Nicholas","how are you today?");
    
  • 没有重载

8 小结

  • ECMAScript 中的基本数据类型包括 Undefined、Null、Boolean、Number和string。
  • 与其他语言不同,ECMScript 没有为整数和浮点数值分别定义不同的数据类型,Number 类型可用于表示所有数值。
  • ECMAScript 中也有一种复杂的数据类型,即 object 类型,该类型是这门语言中所有对象的基础类型。
  • 严格模式为这门语言中容易出错的地方施加了限制。
  • ECMAScript 提供了很多与 C 及其他类 C 语言中相同的基本操作符,包括算术操作符、布尔操作符、关系操作符、相等操作符及赋值操作符等。
  • ECMAScript 从其他语言中借鉴了很多流控制语句,例如 if 语句、for 语句和 switch 语句等。ECMAScript 中的函数与其他语言中的函数有诸多不同之处。
  • 无须指定函数的返回值,因为任何 ECMAScript 函数都可以在任何时候返回任何值。
  • 实际上,未指定返回值的函数返回的是一个特殊的 undefined 值。
  • ECMAScript 中也没有函数签名的概念,因为其函数参数是以一个包含零或多个值的数组的形式传递的。
  • 可以向 ECMAScript 函数传递任意数量的参数,并且可以通过 arguments 对象来访问这些参数。
  • 由于不存在函数签名的特性,ECMAScript 函数不能重载。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容