JavaScript高级程序设计笔记之三:基本概念

228 阅读23分钟

第三章:基本概念

思维导图

1、语法

标识符

  • 概念:指变量、函数、属性的名字,或者函数的参数,

  • 命名规则:

    • 1、第一个字符必须是:字母、下划线(_)或美元符号($)

    • 2、其他字符可以是字母,下划线,美元符号或数字

    • 推荐使用:驼峰大小写来命名【第一个字母小写,每个单词首字母大写】

      • myCar
      • doSomethingImportant
      • firstSecond
    • 注意:不能把【关键字】【保留字】true,false和null用作标识符。

注释

  • 单行注释:

    • // 单行
  • 多行注释:

    • (/) (/)

严格模式

  • 概念:严格模式是为JavaScript定义了一种不同的解析与执行模型
  • “use strict”

语句

  • ECMAScript中的语句以一个分号结尾;如果省略分号,则由解析器确定语句的结尾
  • 代码块 {}
  • 不要省略分号

区分大小写

  • ECMAScript中的一切(变量,函数名,操作符)都区分大小写

2、关键字和保留字

关键字

  • break
  • do
  • instanceof
  • typeof
  • case
  • else
  • new
  • var
  • catch
  • finally
  • return
  • void
  • continue
  • for
  • switch
  • debugger*
  • function
  • this
  • with
  • default
  • if
  • throw
  • delete
  • in
  • try

保留字

  • ECMA-262第3版

    • abstract
    • enum
    • int
    • short
    • boolean
    • export
    • interface
    • static
    • byte
    • extends
    • long
    • super
    • char
    • final
    • native
    • synchronized
    • class
    • float
    • package
    • throws
    • const
    • goto
    • private
    • transient
    • debugger
    • protected
    • volatile
    • double
    • import
    • public
  • 非严格模式下

    • class
    • enum
    • extends
    • super
    • const
    • export
    • import
  • 严格模式下

    • implements
    • package
    • public
    • interface
    • private
    • static
    • let
    • protected
    • yield

3、变量

ECMAScript的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据

虽然省略var操作符可以定义全局变量。但不推荐

  • 在局部作用域中定义的全局变量很难维护,而且如果有意地忽略了var操作符,也会由于相应变量不会马上就有定义而导致不必要的混乱。给未经声明的变量赋值在严格模式下会导致抛出ReferenceError错误。

可以使用一条语句定义多个变量,只要像下面这样把每个变量(初始化或不初始化均可)用逗号分隔开即可

4、数据类型

ES5数据类型

  • Undefined
  • Null
  • Boolean
  • Number
  • String
  • Object(复杂数据类型)

typeof操作符

  • 使用typeof可能返回的值

    • "undefined":值未定义
    • "boolean":值是布尔值
    • “string”:字符串
    • “number”:数值
    • “object”:对象或null
    • “function”:函数
  • typeof 操作符可以是变量,也可以是数值字面量

  • typeof是一个操作符,而不是函数。()可以带可不带

Undefined类型

  • 只有一个值,即特殊的undefined
  • 在使用var声明变量但未对其加以初始化时,这个变量就是undefined
  • 1、未初始化的变量执行typeof==》“undefined”
  • 2、对未声明的变量执行typeof==》“undefined”

Null类型

  • 只有一个值,特殊的值是null
  • 逻辑角度看:null值表示一个空对象指针(typeof null == “object”)
  • undefined值是派生自null值的

Boolean类型

  • 两个字面值:true和false
  • 数据类型对应的转换规则

Number类型

  • IEEE754格式表示:整数和浮点数值

  • 十进制整数

    • var intNum = 55;
  • 八进制(以8为基数)

    • 第一位必须是零(0)
    • 数字序列(0~7)
    • 如果字面值的数值超出了范围,那么前导零将被忽略,后面的数值将被当做十进制数值解析。
  • 十六进制(以16为基数)

    • 前两位必须是 0x,后跟任何十六进制数字(09及AF)(字母可以大写可小写)
    • 在进行算数计算时:所有以八进制和十六进制标识的数值,最终都会被转换成十进制数值。
  • 1、浮点数值

    • 概念:数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。

    • 例子

      • var floatNum1 = 1.1;
      • var floatNum2 = 0.1;
      • var floatNum3 = .1; //有效,但不推荐
    • 对于极大或极小的数值,可以用e表示法(科学计数法)表示的浮点数值表示。

      • 用e表示法表示的数值等于e前面的数值乘以10的指数次幂。
      • var floatNum = 3.125e7;(等于:31250000)
      • 极小:var 分咯爱他Num1 = 3e-17;(等于:0.00000000000000003)
    • 浮点数值的最高精度是17位小数。【但在进行算数计算时,其精确度远远不如整数。】

      • 例:
  • 2、数值范围

    • 最小数值:Number.MIN_VALUE = 5e-324

    • 最大数值:Number.MAX_VALUE = 1.7976931348623157e+308

    • 超出JavaScript数值范围的值:Infinity值。

      • 负无穷

          • Infinity
      • 正无穷

        • Infinity
    • isFinite()

      • 判断一个数值是否是有穷
  • 3、NaN

    • 概念:非数值(Not a Number),特殊的数值【表示:一个本来要返回数值的操作数未返回数值的情况】

    • 特点

      • 1、任何涉及NaN的操作(NaN/10)都会返回NaN

      • 2、NaN与任何值都不相等,包括NaN本身。

      • isNaN()

        • 能直接转换为数值的返回false,不能转换为数值的返回true
  • 4、数值转换

    • 把非数字转换为数值的函数

      • Number():可以用于任何数据类型

        • 规则:

        • 1、如果是Boolean值,true和false将被分别转换为1和0.

        • 2、如果是数字值,只是简单的传入和返回。

        • 3、如果是null值,返回0

        • 4、如果是undefined,返回NaN

        • 5、如果是字符串,遵循下列规则:

          • 如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即"1"会变成1, "123"会变成123,而"011"会变成11(注意:前导的零被忽略了);
          • 如果字符串中包含有效的浮点格式,如"1.1",则将其转换为对应的浮点数值(同样,也会忽略前导零);
          • 如果字符串中包含有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制整数值;
          • 如果字符串中包含除上述格式之外的字符,则将其转换为NaN。
        • 6、如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符串值。

        • 例子:

      • parseInt():字符串转换成数值

        • 十六进制会被转换成10进制数值
        • 在使用parseInt()解析像八进制字面量的字符串时,ECMAScript 3和5存在分歧
        • 第二个参数
      • parseFloat():字符串转换成数值

        • 与parseInt()区别

          • 1、字符串中的第一个小数点是有效的,二第二个小数点就无效了。 在它后面的字符串将被忽略
          • 2、parseFloat始终都会忽略前导的零。

String类型

  • 概念:String类型用于表示由零或多个16位Unicode字符组成的字符序列,即字符串。

  • 字符串可以由双引号(")或者单引号(')

  • 1、字符字面量

    • 转义字符
  • 2、字符串的特点

    • ECMAScript中字符串是不可变的

      • 一旦创建,他们的值就不能改变。
      • 要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量
  • 3、转换为字符串

    • 方法

      • 1、toString()

        • 数值,布尔值,对象和字符串值都有这个方法

        • null 和 undefined值没有

        • 参数

          • 可不传参
          • 输出数值的基数(二进制,八进制,十六进制)toString(2)
      • 2、转型函数String

        • 规则

          • 如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果
          • 如果值是null,则返回”null“
          • 如果值是undefined,则返回”undefined“

Object对象

  • 概念:对象其实就是一组数据和功能的集合

  • Object的每个实例都具有下列属性和方法

    • constructor

      • 保存着用于创建当前对象的函数。
    • hasOwnProperty(propertyName)

      • 用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在
    • propertyIsEnumerable(propertyName)

      • 用于检查给定的属性是否能够使用for-in语句来枚举
    • toLocaleString()

      • 返回对象的字符串标识,该字符串与执行环境的地区对应
    • toString()

      • 返回对象的字符串表示
    • valueOf()

      • 返回对象的字符串、数值或布尔值

5、操作符

一元操作符

  • 概念:只能操作一个值的操作符叫做一元操作符。

  • 1、递增和递减操作符

    • 前置型

      • 执行前置递增和递减操作时,变量的值都是在语句被求值以前改变的
    • 后置型

      • 后置递增和递减与前置递增和递减有一个非常重要的区别,即递增和递减操作是在包含它们的语句被求值之后才执行的。
    • 适用于:整数,字符串,布尔值,浮点数值和对象

      • 遵循规则

        • 1用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减1的操作。字符串变量变成数值变量。
        • 2用于一个不包含有效数字字符的字符串时,将变量的值设置为NaN(第4章将详细讨论)。字符串变量变成数值变量。
        • 3用于布尔值false时,先将其转换为0再执行加减1的操作。布尔值变量变成数值变量。
        • 4用于布尔值true时,先将其转换为1再执行加减1的操作。布尔值变量变成数值变量。
        • 5于浮点数值时,执行加减1的操作。
        • 6用于对象时,先调用对象的valueOf()方法(第5章将详细讨论)以取得一个可供操作的值。然后对该值应用前述规则。如果结果是NaN,则在调用toString()方法后再应用前述规则。对象变量变成数值变量。
  • 2、一元加和减操作符

位操作符

  • 将64位的值转换成32位的整数,然后执行操作,最后再将结果转换回64位。

  • 对于有符号的整数,32位中的前31位用于表示整数的值。第32位用于表示数值的符号:0:整数,1:负数

  • 负数使用的格式是:二进制补码。

    • 1、求这个数值绝对值的二进制码(例如,要求-18的二进制补码,先求18的二进制码);
    • 2、 求二进制反码,即将0替换为1,将1替换为0;
    • 3、得到的二进制反码加1
  • 1.按位非(NOT)

    • 例子:
    • 按位非操作符由一个波浪线(~)表示,执行按位非的结果就是返回数值的反码
  • 2.按位与(AND)

    • 按位与操作符由一个和号字符(&)表示,它有两个操作符数
    • 遵循
  • 3.按位或(OR)

    • 按位或操作符由一个竖线符号(|)表示,同样也有两个操作数
    • 遵循规则
  • 4.按位异或(XOR)

    • 按位异或操作符由一个插入符号(^)表示,也有两个操作数。
    • 真值表
  • 5.左移

    • 左移操作符由两个小于号(<<)表示,这个操作符会将数值的所有位向左移动指定的位数。
  • 6.有符号的右移

    • 有符号的右移操作符由两个大于号(>>)表示,这个操作符会将数值向右移动,但保留符号位(即正负号标记)。
  • 7.无符号右移

    • 无符号右移操作符由3个大于号(>>>)表示,这个操作符会将数值的所有32位都向右移动。

布尔操作符

  • 1.逻辑非

    • 逻辑非操作符由一个叹号(!)表示

    • 规则

      • 如果操作数是一个对象,返回false;
      • 如果操作数是一个空字符串,返回true;
      • 如果操作数是一个非空字符串,返回false;
      • 如果操作数是数值0,返回true;
      • 如果操作数是任意非0数值(包括Infinity),返回false;
      • 如果操作数是null,返回true;
      • 如果操作数是NaN,返回true;
      • 如果操作数是undefined,返回true。
  • 2.逻辑与

    • 逻辑与操作符由两个和号(&&)表示,有两个操作数

    • 真值表

    • 规则:

      • 如果第一个操作数是对象,则返回第二个操作数;
      • 如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象;
      • 如果两个操作数都是对象,则返回第二个操作数;
      • 如果第一个操作数是null,则返回null;
      • 如果第一个操作数是NaN,则返回NaN;
      • 如果第一个操作数是undefined,则返回undefined。
  • 3.逻辑或

    • 逻辑或操作符由两个竖线符号(||)表示,有两个操作数

    • 真值表

    • 规则:

      • 如果第一个操作数是对象,则返回第一个操作数;
      • 如果第一个操作数的求值结果为false,则返回第二个操作数;
      • 如果两个操作数都是对象,则返回第一个操作数;
      • 如果两个操作数都是null,则返回null;
      • 如果两个操作数都是NaN,则返回NaN;
      • 如果两个操作数都是undefined,则返回undefined。

乘性操作符

  • 1、乘法

    • 乘法操作符由一个星号(*)表示,用于计算两个数值的乘积

    • 特殊情况规则:

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

    • 除法操作符由一个斜线符号(/)表示,执行第二个操作数除第一个操作数的计算

    • 特殊情况规则:

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

    • 求模(余数)操作符由一个百分号(%)表示

    • 特殊情况规则:

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

加性操作符

  • 1.加法

    • 加法操作符(+)

    • 操作符都是数值,规则:

      • 如果有一个操作数是NaN,则结果是NaN;
      • 如果是Infinity加Infinity,则结果是Infinity;
      • 如果是-Infinity加-Infinity,则结果是-Infinity;
      • 如果是Infinity加-Infinity,则结果是NaN;
      • 如果是+0加+0,则结果是+0;
      • 如果是-0加-0,则结果是-0;
      • 如果是+0加-0,则结果是+0。
    • 如果有一个操作数是字符串,那么就要应用如下规则

      • 如果两个操作数都是字符串,则将第二个操作数与第一个操作数拼接起来;
      • 如果只有一个操作数是字符串,则将另一个操作数转换为字符串,然后再将两个字符串拼接起来。
      • 如果有一个操作数是对象、数值或布尔值,则调用它们的toString()方法取得相应的字符串值,然后再应用前面关于字符串的规则。对于undefined和null,则分别调用String()函数并取得字符串"undefined"和"null"。
  • 2.减法

    • 减法操作符(-)是另一个极为常用的操作符

    • 特殊规则

      • 如果两个操作符都是数值,则执行常规的算术减法操作并返回结果;
      • 如果有一个操作数是NaN,则结果是NaN;
      • 如果是Infinity减Infinity,则结果是NaN;
      • 如果是-Infinity减-Infinity,则结果是NaN;
      • 如果是Infinity减-Infinity,则结果是Infinity;
      • 如果是-Infinity减Infinity,则结果是-Infinity;
      • 如果是+0减+0,则结果是+0;
      • 如果是-0减+0,则结果是-0;
      • 如果是-0减-0,则结果是+0;
      • 如果有一个操作数是字符串、布尔值、null或undefined,则先在后台调用Number()函数将其转换为数值,然后再根据前面的规则执行减法计算。如果转换的结果是NaN,则减法的结果就是NaN;
      • 如果有一个操作数是对象,则调用对象的valueOf()方法以取得表示该对象的数值。如果得到的值是NaN,则减法的结果就是NaN。如果对象没有valueOf()方法,则调用其toString()方法并将得到的字符串转换为数值。
      • 例子

关系操作符

  • 小于(<)、大于(>)、小于等于(<=)和大于等于(>=)

  • 相应的规则

    • 如果两个操作数都是数值,则执行数值比较。
    • 果两个操作数都是字符串,则比较两个字符串对应的字符编码值。
    • 如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较。
    • 如果一个操作数是对象,则调用这个对象的valueOf()方法,用得到的结果按照前面的规则执行比较。如果对象没有valueOf()方法,则调用toString()方法,并用得到的结果根据前面的规则执行比较。
    • 如果一个操作数是布尔值,则先将其转换为数值,然后再执行比较。

相等操作符

  • 相等和不相等——先转换再比较,全等和不全等——仅比较而不转换。

  • 1.相等和不相等

    • 两个等于号(==)表示,如果两个操作数相等,则返回true。

    • 而不相等操作符由叹号后跟等于号(!=)表示,如果两个操作数不相等,则返回true。

    • 这两个操作符都会先转换操作数(通常称为强制转型),然后再比较它们的相等性。

    • 规则

      • 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false转换为0,而true转换为1;
      • 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值;
      • 如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较;
      • null和undefined是相等的。
      • 要比较相等性之前,不能将null和undefined转换成其他任何值。
      • 如果有一个操作数是NaN,则相等操作符返回false,而不相等操作符返回true。重要提示:即使两个操作数都是NaN,相等操作符也返回false;因为按照规则,NaN不等于NaN。
      • 如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回true;否则,返回false。
      • 特殊情况比较结果
  • 2、全等和不等

    • 除了在比较之前不转换操作数之外,全等和不全等操作符与相等和不相等操作符没有什么区别。全等操作符由3个等于号(===)表示,它只在两个操作数未经转换就相等的情况下返回true

条件操作符

  • 三目运算符

    var max=(num1>num2)?num1:num2;

赋值操作符

  • 简单的赋值操作符由等于号(=)表示,其作用就是把右侧的值赋给左侧的变量
  • 乘/赋值(*=);
  • 除/赋值(/=);
  • 模/赋值(%=);
  • 加/赋值(+=);
  • 减/赋值(-=);
  • 左移/赋值(<<=);
  • 有符号右移/赋值(>>=);
  • 无符号右移/赋值(>>>=)。

逗号操作符

  • 使用逗号操作符可以在一条语句中执行多个操作
  • 逗号操作符多用于声明多个变量
  • 但除此之外,逗号操作符还可以用于赋值

6、语句

6.1. if 语句

  • 这两个语句既可以是一行代码,也可以是一个代码块(以一对花括号括起来的多行代码)。

  • 业界普遍推崇的最佳实践是始终使用代码块,即使要执行的只有一行代码

  • 例子

       if(i>25){
      	alert('XXX is XX 25');
      }else if(i<0){
      	alert('Less than 0.');
      }else{
      	alert('Between 0 and 25,inclusive.');
      }
    

6.2 do-while语句

  • 概念:do-while语句是一种后测试循环语句,即只有在循环体中的代码执行之后,才会测试出口条件

  • 换句话说,在对条件表达式求值之前,循环体内的代码至少会被执行一次。

  • 例子

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

6.3 while语句

  • 概念:while语句属于前测试循环语句,也就是说,在循环体内的代码被执行之前,就会对出口条件求值。因此,循环体内的代码有可能永远不会被执行。

  • 例子

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

6.4 for语句

  • 概念:for语句也是一种前测试循环语句,但它具有在执行循环之前初始化变量和定义循环后要执行的代码的能力。

  • 由于ECMAScript中不存在块级作用域(第4章将进一步讨论这一点),因此在循环内部定义的变量也可以在外部访问到

  • 例子

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

6.5 for-in语句

  • 概念:for-in语句是一种精准的迭代语句,可以用来枚举对象的属性。这个过程会一直持续到对象中的所有属性都被枚举一遍为止。

  • 例子

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

6.6 label语句

  • 概念:使用label语句可以在代码中添加标签,以便将来使用。以下是label语句的语法:

  • 例子:

      start: for(var i=0; i< count; i++){
      	alert(i);
      }
    

    例子中的:start标签可以在将来由break或continue语句引用。加标签的语句一般都要与for语句等循环语句配合使用。

6.7 break和continue语句

  • 概念:break和continue语句用于在循环中精确地控制代码的执行。

  • break语句会立即退出循环,强制继续执行循环后面的语句。而continue语句虽然也是立即退出循环,但退出循环后会从循环的顶部继续执行。

  • 例子1:

      var num =0;
      for(var i=1; i<10;i++){
      	if(i %5 ==0){
      		break;
      	}
      	num++;
      }
      console.log(num);
      // 4
    

6.7 with语句

  • 概念:with语句的作用是将代码的作用域设置到一个特定的对象中。

  • 定义with语句的目的主要是为了简化多次编写同一个对象的工作

  • 例子

      var qs = location.search.substring(1);
      var hostName = location.hostName;
      var url = location.href;
      
      with(location){
      	var qs = search.substring(1);
        var hostName = hostName;
        var url = href;
      }
    

    // with语句关联了 location对象。 意味着在with语句的代码块内部,每个变量首先被认为是一个局部变量,而如果在局部环境中找不到该变量的定义,就会插叙location对象中是否有同名的属性。

    如果发现了同名属性,则以location对象属性的值作为变量的值。

  • 严格模式下不允许使用with语句,否则将视为语法错误。

  • 由于大量使用with语句会导致性能下降,同时也会给调试代码造成困难,因此在开发大型应用程序时,不建议使用with语句。

6.8 switch 语句

  • 概念: switch语句与if语句的关系最为密切,而且也是在其他语言中普遍使用的一种流控制语句。

  • 例子:

      switch(expression){
      	case value:statement
      	break;
        case value: statement
      	break;
      	case value: statement
      	break;
      	default:statement
      }
    

7、函数

概念:

function functionName(arg0, arg1,....,argN){
	statememts
}
  • 通过函数可以封装任意多条语句,而且可以在任何地方、任何时候调用执行。 ECMAScript中的函数使用function关键字来声明,后跟一组参数以及函数体。

  • 函数可以通过其函数名来调用,后面还要加上一对圆括号和参数(圆括号中的参数如果有多个,可以用逗号隔开)

  • 严格模式对函数有一些限制

    • 1)不能把函数命名为eval或arguments
    • 2)不能把参数命名为eval或arguments
    • 3)不能出现两个命名参数同名的情况

7.1理解参数

  • ECMAScript函数不介意传递进来多少个参数,也不在乎传进来参数是什么数据类型。
  • ECMAScript中的参数再内部是用一个数组来表示的,函数接受收到始终都是这个数组,而不关心数组中包含哪些参数。
  • 在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。
  • ECMAScript中的所有参数传递的都是值,不可能通过引用传递参数。

7.2没有重载

  • ECMAScript函数不能像传统意义上那样实现重载。
  • ECMAScirpt函数没有签名,因为其参数是由包含零或多个值的数组来表示的。而没有函数签名,真正的重载是不可能做到的

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函数不能重载。

XMind: ZEN - Trial Version