JavaScript第三章

JavaScript第三章
  • 语法
    • 区分大小写

    • 标识符

      第一个字符必须是一个字母、下划线(_)或一个美元符号($); 其他字符可以是字母、下划线、美元符号或数字。

      标识符建议使用驼峰大小格式

    • 注释

      单行://

      多行:/。。。。。/

    • 严格模式

      “use strict”

      在严格模式下,ECMAScript 3中的一些不确定的行为将得到处理,而且对某些不安全 的操作也会抛出错误

    • ECMAScript语句末可以不用‘;’,但是建议加上,因为如果不加的话就是解析器自己确定语句的结尾。

  • 关键字和保留字

    • 关键字

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

      严格模式:class enum extends super const export impor

      • 保留字

      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 implements protected volatile double import public

      严格模式:implements package public interface private static let protected yield

  • 变量

    • ECMAscript的变量是松散类型的,每个变量仅仅是一个用于保存值的占位符而已,即只用用Var声明即可,它就可以储存所有类型的数据。用Var声明的变量是局部变量。

    • 省略 var 操作符可以定义全局变量,但是不推荐:

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

  • 数据类型

    • 简单类型:Undefined、Null、Boolean、Number 和String

    • 复杂类型:Object

    • typeof:用来检测给定变量的数据类型

      “undefined”——如果这个值未定义;

      “boolean”——如果这个值是布尔值;

      “number”——如果这个值是数值;

      “object”——如果这个值是对象或 null;

      “function”——如果这个值是函数.

      例子:

      var message = “some string”;

      alert(typeof message); // “string”

      alert(typeof(message)); // “string”

      alert(typeof 95); // “number”

      • typeof 是一个操作符而不是函数
    • Undefined类型

      Undefined 类型只有一个值,即特殊的 undefined。在使用 var 声明变量但未对其加以初始化时, 这个变量的值就是 undefined.

      对于没有声明的变量不能使用,会弹出错误,只能使用typeof检查其数据类型。

      但是:对未初始化的变量执行 typeof 操作符会返回 undefined 值,而对未声明 的变量执行 typeof 操作符同样也会返回 undefined 值。

    • Null类型

      Null 类型是第二个只有一个值的数据类型,这个特殊的值是 null。从逻辑角度来看,null 值表 示一个空对象指针,而这也正是使用 typeof 操作符检测 null 值时会返回"object"的原因。

      若定义的变量准备在将来用于保存对象,那么好将该变量初始化为 null 。

    • Bollean类型

      该类型只有两个字面值:true 和 false(区分大小写)

      true 不一定等于 1,而 false 也不一定等于 0。

      • 要将一个值转换为其对应的 Boolean 值,可以调用转型函数 Boolean()。
    • Number类型

      • 浮点数 :该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字(不能比较大小)

      • 数值范围

        Max1:1.7976931348623157e+308;如果某次计算的 结果得到了一个超出 JavaScript数值范围的值,那么这个数值将被自动转换成特殊的 Infinity

        isFinite()函数:这个函数在参数位于小与大数值之间时会返 回 true;

        *访问 Number.NEGATIVE_INFINITY 和 Number.POSITIVE_INFINITY 也可以 得到负和正 Infinity 的值。可以想见,这两个属性中分别保存着-Infinity 和 Infinity。 *

    • NaN

      NaN,即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数 未返回数值的情况;

      isNaN()函数:。isNaN()在接收到一个值之后,会尝试 将这个值转换为数值。某些不是数值的值会直接转换为数值,不能被转换为数值的值都会导致这个函数返回 true;

    • 数值转换

      • Number()

        如果是 undefined,返回 NaN。  如果是字符串,遵循下列规则:

        如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即"1" 会变成 1,"123"会变成 123,而"011"会变成 11(注意:前导的零被忽略了);

        如果字符串中包含有效的浮点格式,如"1.1",则将其转换为对应的浮点数值(同样,也会忽 略前导零);

        如果字符串中包含有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制整 数值;

        如果字符串是空的(不包含任何字符),则将其转换为 0;  如果字符串中包含除上述格式之外的字符,则将其转换为 NaN。

         如果是对象,则调用对象的 valueOf()方法,然后依照前面的规则转换返回的值。如果转换 的结果是 NaN,则调用对象的 toString()方法,然后再次依照前面的规则转换返回的字符 串值。
        
      • parseInt()

        会忽略字 符串前面的空格,直至找到第一个非空格字符。如果第一个字符不是数字字符或者负号,parseInt() 就会返回 NaN

        能够识别出各种整数格式(即 十进制、八进制和十六进制数)

        可以为这个函数提供第二个参数:转换 时使用的基数(即多少进制)

        var num = parseInt(“0xAF”, 16); //175

        var num1 = parseInt(“AF”, 16); //175

      • parseFloat()

        从第一个字符(位置 0)开始解析每个字符。而且 也是一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止。parseFloat()只解析十进制值

    • String类型

      String 类型用于表示由零或多个 16位 Unicode字符组成的字符序列,即字符串。字符串可以由双 引号(")或单引号(’)表示。

      • 字符字面量(转义序列)

        \n 换行

        \t 制表

        \b 空格

        \r 回车

        \f 进纸

        \\ 斜杠

        ’ 单引号(’),在用单引号表示的字符串中使用。例如:'He said,'hey.

        " 双引号("),在用双引号表示的字符串中使用。例如:“He said, “hey.””

        \xnn 以十六进制代码nn表示的一个字符(其中n为0~F)。例如,\x41表示"A"

        \unnnn 以十六进制代码nnnn表示的一个Unicode字符(其中n为0~F)。例如,\u03a3表示希腊字符Σ

      • 特点

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

      • 转换为字符串

      • 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”

      • String() //要转换的值是不是 null 或 undefined

      > 如果值有 toString()方法,则调用该方法(没有参数)并返回相应的结果;
      > 
      >  如果值是 null,则返回"null";
      > 
      >  如果值是 undefined,则返回"undefined"
      
    • Object类型 (是一组数据和功能的集合)

      创建 Object 类型的实例并为其添加属性和(或)方法,就可以创建自定 义对象

      var o = new Object();

  • 操作符

    • 一元操作

      ++;–;

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

      在应用于一个不包含有效数字字符的字符串时,将变量的值设置为 NaN(第 4章将详细讨论)。 字符串变量变成数值变量。

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

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

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

      在应用于对象时,先调用对象的 valueOf()方法(第 5章将详细讨论)以取得一个可供操作的 值。然后对该值应用前述规则。如果结果是 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

    • 一元加和减操作符

      放在数值前面,对数值不会产生任何影响

      对非数值应用一元加操作符时,该操作符会像 Number()转型函数一样对这个值执行转换

      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;

      }

      }

      s1 = +s1; // 值变成数值 1

      s2 = +s2; // 值变成数值 1.1

      s3 = +s3; // 值变成 NaN

      b = +b; // 值变成数值 0

      f = +f; // 值未变,仍然是 1.1

      o = +o; // 值变成数值-1

    • 位操作符

    在 ECMAScript中,当对数值应用位操作符时,后台会发生如下转换过程:64位的数值被转换成 32 位数值,然后执行位操作,后再将 32位的结果转换回 64位数值。(即在对特殊的 NaN 和 Infinity 值应用位操作时,这两个值都会被当成 0来处理)

    • 按位非(NOT

    • 按位异或(XOR)

    • 左移 (<<)

    • 有符号的右移 (>>)

    • 无符号右移 (>>>)

    • 布尔操作符

      • 逻辑非(!)

        alert(!false); // true

        alert(!“blue”); // false

        alert(!0); // true

        alert(!NaN); // true

        alert(!""); // true

        alert(!12345); // false

      • 逻辑与 (&&)

      如果第一个操作数是对象,则返回第二个操作数;

      如果第二个操作数是对象,则只有在第一个操作数的求值结果为 true 的情况下才会返回该 对象;

      如果两个操作数都是对象,则返回第二个操作数;

      如果有一个操作数是 null,则返回 null;

      如果有一个操作数是 NaN,则返回 NaN;

      如果有一个操作数是 undefined,则返回 undefined。

      (逻辑与操作属于短路操作,即如果第一个操作数能够决定结果)

      • 逻辑或(||)

        如果第一个操作数是对象,则返回第一个操作数;

        如果第一个操作数的求值结果为 false,则返回第二个操作数;

        如果两个操作数都是对象,则返回第一个操作数;

        如果两个操作数都是 null,则返回 null;

        如果两个操作数都是 NaN,则返回 NaN;

        如果两个操作数都是 undefined,则返回 undefined

    • 乘性操作符

    (*),(/),(%)

    如果操作数都是数值,执行常规的乘法计算,即两个正数或两个负数相乘的结果还是正数,而 如果只有一个操作数有符号,那么结果就是负数。如果乘积超过了 ECMAScript数值的表示范围, 则返回 Infinity 或-Infinity;

    如果有一个操作数是 NaN,则结果是 NaN;  如果是 Infinity 与 0相乘(除),则结果是 NaN;

    如果是 Infinity 与非 0数值相乘(除),则结果是 Infinity 或-Infinity,取决于有符号操作数 的符号;

    如果是 Infinity 与 Infinity 相乘(/),则结果是 Infinity(NaN);

    如果是零被零除,则结果是 NaN;

    如果是非零的有限数被零除,则结果是 Infinity 或-Infinity,取决于有符号操作数的符号;

    如果有一个操作数不是数值,则在后台调用 Number()将其转换为数值,然后再应用上面的 规则。

    • 加性操作符

      (+),(-)

      如果有一个操作数是 NaN,则结果是 NaN;

      如果是 Infinity 加(-) Infinity,则结果是 Infinity(NaN);

      如果是-Infinity 加(-)-Infinity,则结果是-Infinity(NaN);

      如果是 Infinity 加(-)-Infinity,则结果是 NaN(Infinity);

      如果是-Infinity 减 Infinity,则结果是-Infinity;

      如果是+0加(-)+0,则结果是+0;

      如果是-0加(-)-0,则结果是-0(+0);

      如果是+0加(-)-0,则结果是+0(-0)。

      不过,如果有一个操作数是字符串,那么就要应用如下规则:

      如果两个操作数都是字符串,则将第二个操作数与第一个操作数拼接起来;

      如果只有一个操作数是字符串,则将另一个操作数转换为字符串,然后再将两个字符串拼接 起来。

    • 关系操作符

    (<)、(>)、(<=)、(>=)

    • 相等操作符

      • 相等和不相等 (==)

        表达式
        null == undefinedtrue
        “NaN” == NaNfalse
        5 == NaNfalse
        NaN == NaNfalse
        false == 0true
        true == 1true
        true == 2false
        undefined == 0false
        null == 0false
        “5”==5true
      • 全等和不全等 (===)

        它只在两个操作数未经转换就相等的情况下返回 true:null == undefined 会返回 true,因为它们是类似的值;但 null === undefined 会返回 false,因为它们是不同类型的值

    • 条件操作符 (?)

    • 赋值操作符 (=)

    • 乘/赋值(*=);

    • 除/赋值(/=);

    • 模/赋值(%=);

    • 加/赋值(+=);

    • 减/赋值(=);

    • 左移/赋值(<<=);

    • 有符号右移/赋值(>>=);

    • 无符号右移/赋值(>>>=;

    • 逗号操作符

    用于声明多个变量;但除此之外,逗号操作符还可以用于赋值。在用于赋值时,逗号 操作符总会返回表达式中的后一项

  • 语句

    • if

    • do-while

    • while

    • for

    • for-in

    用来枚举对象的属性

    for-in 循环输出的属性名的顺序是不可预测

    for (var propName in window) {

     document.write(propName); 
    

    }

    示要迭代的对象的变量值为 null 或 undefined,for-in 语句会抛出错误

    建议在使用 for-in 循环之前,先检测确认该对象的值不是 null 或 undefined

    • label

    label 语句可以在代码中添加标签,以便将来使用

    • break和continue

      可以与标签连用

    • with

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

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

    • switch

  • 函数

    函数使用 function 关键字来声明,后跟一组参数以及函数体。ECMAScript 中的函数在定义时不必指定是否返回值

    严格模式:

    不能把函数命名为 eval 或 arguments;

    不能把参数命名为 eval 或 arguments;

    不能出现两个命名参数同名的情况

  • 参数

    传参数自由,参数表其实是一个数组。

  • 没有重载

    在 ECMAScript中定义了两个名字相同的函数,则该名字只属于后定义的函数

  • 小结

    这一章讲了基本数据类型和一些语句,操作符,函数,总的感觉不是太难。与之前学过的其他的语言在语句方面差距也不是很大。在函数和数据类型有一些新东西。多了一个标签,尤其是函数的参数表就是一个数组这个很不同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值