• JS高级程序设计学习笔记之第三章基本概念(语法,数据类型,流控制语句,函数)——查漏补缺


    一、语法:

    1. 区分大小写;

          2.标识符:就是指变量、函数、属性的名字,或者函数的参数
        a、标志符的规则:①第一个字符必须是一个字母、下划线(_)或一个美元符号($)。
                            ②其他字符可以是字母,下划线,美元符号或者数字。
        b、标志符采用驼峰大小写格式。
        c、严格模式:在顶部添加以下代码:"use strict";
        d、语句:结尾加入分号、在控制语句中使用代码块为最佳实践。


    二、关键字与保留字


    三、变量:ECMAScript的变量是松散类型,可以保存任何类型的数据。且在初始化变量时,不会为它标记类型。
         1、不建议修改变量所保存值得类型,但这种操作是有效的
       2、使用var操作符定义的变量为局部变量。函数退出后会被销毁。
       3、不推荐省略var操作符来定义全局变量。如果有意的忽略var操作符,也会由于相应变量不会马上就有定义而导致不必要的混乱。给未经声明的变量赋值在严格模式下会报错。

    四、数据类型:ECMAScript有5种简单数据类型(基本数据类型)——Undefined、Null、Boolean、Number、和String。一种复杂数据类型——Object。

      1.typeof操作符——检测给定变量的数据类型

        undefined——如果这个值未定义;
        boolean——如果这个值是布尔值;
        string——如果这个值是字符串;
        number——如果这个值是数值;
        object——如果这个值是对象或者null;
        function——如果这个值是函数;

      2.undefined类型:
        a、在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。(默认取得)。
        b、对于尚未声明的变量,只能执行一项操作,使用typeof操作符检测其数据类型。返回undefined。
        c、尽可能显式的初始化变量,这样当ytpeof返回undefined时,我们就知道 被检测的变量还没有被声明,而不是尚未初始化。

      3、null类型:
        a、如果定义的变量准备在将来用于保存对象,那么最好将变量初始化为null而不是其他值。
        b、undefined的值是派生自null的,所以他们的相等性测试返回true。(双等返回true,三等返回false)。

      4、boolen类型:
        a、Boolean类型的字面量true和false是区分大小写的。其他写法都不是Boolean值,只是标志符。
        b、ECMAScript中所有类型的值都有与这两个Boolean值等价的值。要将一个值转换成对应的Boolean值,可以调用转型函数Boolean()。

    数据类型 转换为true的值 转换为false的值
    Boolean true false
    string 任何非空字符串 空字符串
    number 任何非零数值(包括无穷大) 0和无穷大
    object 任何对象 null
    undefined 不适用 undefined

      5、number类型:
        a、八进制字面量的第一位必须是零(0),然后是八进制数字序列。如果字面值中的数值超出了范围,那么前导零将被忽略,后面的数值被当做十进制数值解析。八进制字面量在严格模式下无效。
        b、十六进制字面量的前两位必须是0x,后跟任何十六进制数字0~9和a~z,字母可大写可小写。
        c、在进行算术计算时,所有八进制与16进制表示的数最终都被转换成十进制
        d、浮点数值:
          ①数值中必须包含一位小数点,小数点后必须至少有一位数字。小数点前可以没有整数,但是不推荐。浮点数值若能转换为整数值,那么会被转换。
          ②极大极小值用e表示法。
          ③浮点数的精度有bug,所以不要测试某个浮点数的值
        e、数值范围:超出js数值范围的值会被自动转换成Infinity。Infinity无法参与计算。isFinite()函数在参数位于最大最小值之间时会返回true。
        f、NaN:用来表示一个本来要返回数值的操作数未返回数值的情况。
          ①任何涉及NaN的操作,都返回NaN。NaN与任何值都不相等,包括他本身。
          ②isNaN()函数接收一个参数,该参数可以是任何类型,函数会尝试将参数转换为数值,任何不能被转换为数值的值都会导致函数返回true。该函数适用于对象,先调用对象的valueOf()方法,然后确定该方法返回的值能否转换为数值。若不能,则基于这个返回值再调用toString()方法,再测试返回值。
        g、数值转换:
          ①Number():用于任何数据类型
            如果是Boolean值,true和false分别返回1和0。
            如果是数值,简单地传入返回。
            如果是null,返回0。
            如果是undefined,返回NaN。
            如果是字符串:
              如果字符串只包含数字(无论正负),将其转换为十进制,忽略前导零。
              如果字符串包含有效浮点格式,转换成对应浮点格式,忽略前导零。
              如果字符串包含有效16进制,将其转换为相同大小的十进制整数值。
              如果字符串为空,将其转换为0。
              如果字符串包含除上述格式之外的字符,则将其转换为NaN。
            如果是对象:调用valueOf()方法,然后依照前面的规则转换返回值。如果转换结果是NaN,则调用toString()方法,然后再次依照前面规则转换。
          ②parseInt():忽略字符串前面的空格,直到找到第一个非空格字符。如果第一个字符不是数字字符或者负号,即返回NaN。用parseInt()解析空字符串会返回NaN。如果第一个字符是数字字符,则继续解析第二个字符直到所有的字符被解析完或者遇到了一                                    个非数字字符。
                parseInt()可以解析八进制与十六进制数,在ECMAScript5 JS引擎,parseInt()不具备解析八进制的能力。
                可以为parseInt()函数提供第二个参数来指定转换时使用的基数(即多少进制)。如果指定了十六进制,字符串前可以不带0x。
          ③parseFloat():与parseInt()类似,解析到遇到一个无效的浮点数字符为止,即第二个小数点无效。
                  始终忽略前导零,十六进制字符串始终被转换成0。只解析十进制。若解析为整数则返回整数。

      6、String类型
        a、字符字面量:
          ①包含一些特殊的字符字面量,也叫转义序列,表示非打印字符,或具有其他用途。这些字符字面量可以出现在字符串中的任意位置,而且也被当做一个字符来解析。
          ②任何字符串的长度都可以通过访问其length属性获得。(若含有双字节字符,则无法返回精确的字符数目)。
        b、字符串的特点
          ①字符串是不可变的,只能销毁与重新填充变量。
        c、转换为字符串:
          ①toString():
            数值、布尔值、字符串和对象都有该方法。但是null与undefined没有。
            在调用数值的toString()方法时,可以传递一个参数来确定输出数值的基数。
          ②String():
            可以转换任何类型,包括undefined(返回undefined)与null(返回null)。


      7、Object类型:
        Object的每个实例都有以下属性与方法:
          constructor:他的构造函数
          hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中是否存在。而非原型中。
          isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型。
          propertyIsEnumerable(propertyName):用于检查给定属性是否能够使用for-in语句来枚举。
          toLocaleString
          toString
          valueOf
        BOM和DOM中的对象都属于宿主对象,可能会也可能不会继承Object。

    五、操作符:
      1、++  -- 又分别有前置后置,共四个操作符。可用于number、boolean、string、object。
      2、+ -操作符。对非数值应用一元加或减操作符时,操作符会像Number()转型函数一样对这个值执行转换
      3、布尔操作符:
        逻辑非:!
          如果操作数是一个对象,返回false。
          如果操作数是一个空字符串。返回true。
          如果操作数是一个非空字符串。返回false。
          如果操作数是一个0,返回true。
          如果操作数是任意非零数值(包括Infinity),返回false。
          如果操作数是null,返回true。
          如果操作数是NaN,返回true。
          如果操作数是undefined,返回true。
          同时使用两个逻辑非操作符,实际上就会模拟Boolean()转型函数。
      
        逻辑与:&&,可以应用于任何类型的操作数,在第一个操作数不是布尔值得情况下,就不一定返回布尔值。逻辑与操作属于短路操作。
          如果第一个操作数是对象,就返回第二个操作数。
          如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象。
          如果两个操作数都是对象,则返回第二个操作数。
          如果有一个操作数是null,则返回null。
          如果有一个操作数是NaN,则返回NaN。
          如果第一个操作数是undefined,则返回undefined。
      
        逻辑或:||,可以应用于任何类型的操作数,在有一个操作数不是布尔值得情况下,就不一定返回布尔值。逻辑或操作属于短路操作。
          如果第一个操作数是对象,就返回第一个操作数。
          如果第一个操作数的求值结果为false,则返回第二个操作数。
          如果两个操作数都是对象,则返回第一个操作数。
          如果两个操作数都是null,则返回null。
          如果两个操作数都是是NaN,则返回NaN。
          如果两个操作数都是undefined,则返回undefined。

      4、乘性操作符:
        ①乘法:若某个操作数不是数值,后台会先使用Number()转型函数将其转换。
            在处理特殊情况时,遵循下列原则;
              如果有一个操作数为NaN,则结果为NaN。
              如果Infinity与0相乘,结果为NaN。
              如果Infinity与非0相乘,结果为Infinity或-Infinity。
              如果Infinity与Infinity相乘,结果是Infinity。
        ②除法:与乘法类似
            在处理特殊情况时,遵循下列原则;
              如果有一个操作数为NaN,则结果为NaN。
              如果Infinity被Infinity除,结果为NaN。
              如果0被0除,结果为NaN。
              如果非0有限数被0除,结果为Infinity或-Infinity。
              如果Infinity被任何非零数除,结果是Infinity或-Infinity。
        ③求模:
            在处理特殊情况时,遵循以下原则:
              如果被除数是无穷大值,除数是有限大数值,则结果是NaN。
              如果被除数是有限大数值,而除数是零,则结果是NaN。
              如果是Infinity被Infinity除,则结果是NaN。
              如果被除数是有限大的数值而除数是无穷大的数值,则结果是被除数。
      5、加性操作符:
        ①加法:
          如果是Infinity加-Infinity,结果是NaN。
          如果有一个操作数是对象、数值或布尔值,则调用他们的toString()方法取得相应的字符串值,然后拼接。对于undefined与null,调用String()取得相应字符串,然后拼接。
        ②减法:
          如果是Infinity减去Infinity,结果是NaN。
          如果是-Infinity减去-Infinity,结果是NaN。
          如果是Infinity减去-Infinity,结果是Infinity。
          如果是-Infinity减去Infinity,结果是-Infinity。

      6、关系操作符:< > <= >=
         如果两个操作数都是数值,则执行数值比较。
         如果两个操作数都是字符串,则比较两个字符串对应的字符编码值。
         如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较。
         如果一个操作数是对象,调用valueOf()方法,然后依照前面的规则。如果没有valueOf()方法,则调用toString()方法,然后再次依照前面规则比较。
         任何操作数和NaN比较,结果都是false。

      7、相等操作符:
        == :双等号,先转换,在判断。
          null与undefined是相等的。
          要比较相等性之前,不能将null与undefined转换为其他任何值。
          如果有一个操作数是NaN,则相等操作符返回false。不等操作符返回true。两个操作数均为NaN,相等操作符返回false。
          如果两个操作数都是对象,若都指向同一个对像,则相等操作符返回true,否则,false。
        === :三等号,仅比较不转换。
      8、条件操作符:  a ? b : c
      

    六、语句
      1、if
      2、do-while:后测试循环
      3、while:前测试循环
      4、for-in:精准的迭代,用来枚举对像属性。(在循环之前,先检测确认该对象的值不是null或undefined)。
      5、label语句。配合break与continue使用。高程58页。
      6、break continue。
      7、with:简化多次编写同一对象的工作。严格模式下不允许使用。

    /*第一种写法*/
    var qs = location.search.substring(1);
    var hostName = location.hostName;
    var url = location.url;
    
    /*whith写法,与第一种功能相同*/
    with(location){
       var qs = search.substring(1);
       var hostName = hostName;
       var url = url;
    }

      8、switch:每执行完一个case需要break,否则将继续执行下一个case。

    七、参数:
      ECMAScript中的参数在内部使用一个数组表示,函数接收到的始终是这个数组,而不关心数组中有哪些参数。在函数体内通过arguments对象来访问这个参数数组。arguments对象与数组类似但是不是数组,使用length属性可以确定长度。
      arguments的值永远与对应的命名参数保持同步。但是内存空间独立。arguments的长度仅由传入参数的个数决定。没有传递值的命名参数将自动被赋予undefined。
      ECMAScript中所有参数的传递都是值。
    八、没有重载:两个命名相同的函数,只有后一个有效。

        

  • 相关阅读:
    2017-2018 ACM-ICPC, NEERC, Northern Subregional Contest C
    Codeforces Round #445 div.2 D. Restoration of string 乱搞
    hdu 6228 Tree
    数塔(入门级dp)
    逆序数(归并排序和树状数组)
    poj2104 K-th Number 主席树入门;
    Codeforces Round #466 (Div. 2)F. Machine Learning 离散化+带修改的莫队
    Codeforces Round #470 (rated, Div. 2, based on VK Cup 2018 Round 1)C. Producing Snow+差分标记
    2038: [2009国家集训队]小Z的袜子(hose)+莫队入门
    Codeforces Round #220 (Div. 2)D. Inna and Sequence 树状数组+二分
  • 原文地址:https://www.cnblogs.com/wangkaiyuan/p/5744710.html
Copyright © 2020-2023  润新知